注册 登录
编程论坛 汇编论坛

来啊!快活啊! 遇到一个死循环解决不了了

hwd96 发布于 2016-11-29 21:28, 4092 次点击
目的:16x16打印00-ff的ascii字符
问题:成功打印16x16的ascii字符,但是一直循环打印





assume cs:code ss:stack
stack segment
db 16 dup('0')
stack ends

code segment
start:    mov sp, 16
mov ax, 0
mov dx, 0
mov cx, 16
mov bx, 0
L1:    push cx
mov cx, 16
L2:    cmp bl, 07h
jb print
cmp bl, 10h
ja print
jmp a1


print:    mov al, 0
mov dl, bl
a2:    mov ah, 02h
int 21h
mov dl, 20h
mov ah, 02h
int 21h
inc bl
loop L2   

mov dl, 0dh
mov ah, 02h
int 21h
mov dl, 0ah
mov ah, 02h
int 21h
pop cx
loop L1

a1:    mov dl, 23h
jmp a2


ending:    mov ax, 4c00h
int 21h

code ends

end start
11 回复
#2
hwd962016-11-29 21:29
顶我自己简称自顶
#3
hwd962016-11-29 21:43
assume cs:code ss:stack
stack segment
    db 16 dup('0')
stack ends

code segment
start:    mov sp, 16
        mov ax, 0
        mov dx, 0
        mov cx, 16
        mov bx, 0
L1:        push cx
        mov cx, 16
L2:        cmp bl, 07h
        jb print
        cmp bl, 10h
        ja print
        jmp a1
   
   
print:    mov al, 0
        mov dl, bl
a2:        mov ah, 02h
        int 21h
        mov dl, 20h
        mov ah, 02h
        int 21h
        inc bl
        loop L2   

        mov dl, 0dh
        mov ah, 02h
        int 21h
        mov dl, 0ah
        mov ah, 02h
        int 21h
        pop cx
        loop L1

a1:        mov dl, 23h
        jmp a2


ending:    mov ax, 4c00h
        int 21h

code ends

end start
#4
hwd962016-11-29 21:44
重新排下版
#5
hwd962016-11-29 22:17
真没人了吗。。。
#6
Valenciax2016-11-30 06:58
回头看
#7
Valenciax2016-11-30 13:44
楼主的代码里没有[离开]或[跳转]到ending:的指令
#8
hwd962016-11-30 16:01
谢谢版主
说的对
外层循环结束后忘记跳出了
#9
wmf20142016-11-30 17:56
这代码跳的,眼花缭乱啊!你一开始修改sp=16(十进制哦),很担心调试时栈溢出。
#10
zhulei19782016-12-01 09:05
assume cs:code ss:stack
 stack segment
 db 16 dup('0')
 stack ends

 code segment
 start:    mov sp, 16
 mov ax, 0
 mov dx, 0
 mov cx, 16
 mov bx, 0
 L1:    push cx
 mov cx, 16
 L2:    cmp bl, 07h
 jb print
 cmp bl, 10h
 ja print
 jmp a1


a1:    mov dl, 23h
  jmp a2

  

 print:    mov al, 0
 mov dl, bl
 a2:    mov ah, 02h
 int 21h
 mov dl, 20h
 mov ah, 02h
 int 21h
 inc bl
 loop L2   

 mov dl, 0dh
 mov ah, 02h
 int 21h
 mov dl, 0ah
 mov ah, 02h
 int 21h
 pop cx
 loop L1

 
 


 ending:    mov ax, 4c00h
 int 21h

 code ends

 end start
#11
Valenciax2016-12-01 20:57
回复 9楼 wmf2014
wmf兄,很久不见,问好
#12
shanxidls2017-05-14 20:18
ja,jb不懂,见的太少
1