指令介绍

ZF(Zero Flag)零标志位;运算结果是否为 0

  • JE = JZ 结果为零则跳转(相等时跳转) ZF=1
  • JNE = JNZ 结果不为零则跳转(不相等时跳转) ZF=0

JEJNE 指令,单独使用并没有太大的意义。通常都是和 CMP 指令一起使用。

CMP 运算之后,影响 ZF 的值。

  • CMP 运算之后,ZF=1,使用 JE 跳转。(两数相等则跳转。)
  • CMP 运算之后,ZF=0,使用 JNE 跳转。(两数不相等则跳转。)

程序设计

  • 输入两个数,如果这两个数相同的话,则在屏幕上显示 “Two numbers the same”。
  • 如果这两个数不同的话,在屏幕上显示 “Two different numbers
;0xB8000~0xBFFFF 这段物理地址空间,是留给显卡的,由显卡来提供,用来显示文本。
mov ax, 0xB800
mov es:ax

;初始化数据段寄存器
mov ax, 0x07C0
mov ds, ax 

mov si, 0 ;初始化数据段 偏移寄存器
mov di, 0 ;初始化显示段 便宜寄存器

jmp near code


Number1:
dw 18   ;dw(一个字)是2个字节,16位,最大65535

Number2:
dw 18


string1:
db 'Two numbers the same'

string2:
db 'Two different numbers'


code:
mov ax, word[ds:Number1] ;读取一个字到ax
mov bx, word[ds:Number2] ;读取一个字到bx

cmp ax, bx

je printString1    ;zf=1跳转,相等就跳转



printString2:
mov cx, code - string2
mov si, string2
jmp near startPrint



printString1:
mov cx, string2 - string1
mov si, string1



startPrint:
mov al, byte [ds:si]
mov byte[es:di], al
inc di
mov byte [es:di], 0x07
inc di
inc si
loop startPrint

end:
jmp 0x07C0:end

times 510 - ($ -$$) db 0x00
dw 0xAA55 ; 相当于 db 0x55,0xAA