怎么' cmp'命令有效?

时间:2014-05-31 16:58:56

标签: assembly x86

我在大学开设了集会课程,并且无法理解一些基本操作(我在开始时错过了几门课程)。

我有一个打印数字的简单程序,这是程序:

.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它..?我不明白这里的比较是如何运作的..:/

请帮助我理解,我是一个完全的初学者,我卡住了..

如果有人不介意一般地解释这个程序,并且更加关注那些令人敬畏的比较......

欢呼

1 个答案:

答案 0 :(得分:3)

cmp执行与sub执行完全相同的操作,但它不会将结果保存在目标寄存器中。但是,就像sub一样,它设置了可以在后续条件跳转操作中使用的标志寄存器。