【发布时间】:2017-11-04 15:39:24
【问题描述】:
我试图用OutBin proc 在loop l1 中简单地输出CX 的值(二进制),但它只给了我它的第一个值(10)。
我猜循环本身有问题,在调用过程之前保存寄存器,但我不知道如何解决所有问题。
.model small
.stack 100h
.data
; X dw 10 DUP (1,2,3)
.code
.startup
mov cx, 10
l1:
mov ax, cx
push cx
call OutBin
pop cx
loop l1
OutBin proc
; AX to print
mov bx, ax
mov cx, 16
ob1:
shl bx,1
jc ob2
mov dl,'0'
jmp ob3
ob2:
mov dl, '1'
ob3:
mov ah,2
int 21h
loop ob1
;call NewLine
OutBin endp
NewLine proc
mov dx, 0Dh
mov ah,2
int 21h
mov dx, 0Ah
mov ah,2
int 21h
NewLine endp
.exit
end
【问题讨论】:
-
使用调试器单步执行代码以查看执行路径。 (提示,你忘了在函数结束时
ret)。 -
@PeterCordes 非常感谢,缺少
ret真的是一个错误。但是,执行后,控制台冻结,不要求我按任何键返回编辑器或其他东西 -
使用调试器查看您的代码是否到达退出系统调用。如果没有,它会卡在哪里。