我在大学开设了集会课程,并且无法理解一些基本操作(我在开始时错过了几门课程)。
我有一个打印数字的简单程序,这是程序:
.model small
.stack 100h
.data
num dw -32768
numS db 6 dup(' '),'$'
.code
mov ax, @data
mov ds, ax
mov ax, num
mov bx, 10
mov si, offset numS+5
next:
cwd
idiv bx
cmp dx, 0
jge cont
neg dx
cont:
add dl, 48
mov [si], dl
dec si
cmp ax, 0
jz sof
jmp next
sof:
cmp num, 0
jge soff
mov byte ptr[si], '-'
soff:
mov ah, 9
mov dx, si
int 21h
.exit
end
我在其他网站上检查了cmp命令正在做什么,而实际算法是opr1 - opr2 ...所以在这个程序中我采取了devision的提示(放置在dx中的ax / bx)并从中减少0它..?我不明白这里的比较是如何运作的..:/
请帮助我理解,我是一个完全的初学者,我卡住了..
如果有人不介意一般地解释这个程序,并且更加关注那些令人敬畏的比较......
欢呼答案 0 :(得分:3)
cmp
执行与sub
执行完全相同的操作,但它不会将结果保存在目标寄存器中。但是,就像sub
一样,它设置了可以在后续条件跳转操作中使用的标志寄存器。