我在下面的代码中遇到了这个问题,它将数字转换为 ASCII '数字文本'。但是代码似乎在“div”操作码处循环
;Main Program
main:
mov ax, 0x0000
mov ds, ax ; setup data segment register
mov si, GreetString ; setup data segment offset
call print_string ; call print string procedure
mov si, DataWord ; setup data segment offset
mov bl, 0x000A ; base 10
call format_string ; call format string procedure
mov si, GreetString ; setup data segment offset
call print_string ; call print string procedure
prevent_overflow:
hlt ; halt the CPU
jmp prevent_overflow
format_string:
mov ax, [ds:si] ; load register ax with data
xor cx, cx ; set counter to 0
mov si, GreetString ; set pointer to address of GreetString
.format_char:
div bl ; divides by register bl
add ah, 48 ; convert to ascii numeric
mov [ds:si], ah ; move ascii numeric to ds:si
inc cx ; increase counter
inc si ; increase si
xor ah, ah ; clear ah register
or ax, ax
jnz .format_char ; jump to format next char
ret
知道为什么会这样吗?我说“循环”是因为我的 CPU 处于最大值并且在 div 之后没有继续执行操作码
*更新。谢谢纽格。添加了主要部分以使其更具可读性 (^.^)