jcxz指令

Waffle666發表於2020-11-14

jcxz指令為有條件轉移指令,所有的有條件轉移指令都是短轉移(jmp為無條件轉移指令),在對應的機器碼中包含轉移的位移,而不是目的地址。對ip的修改範圍都為-128~127

j=jmp
cx=cx暫存器
z=zero=0
======>含義:在cx暫存器中的值為0時跳轉
與loop指令相反(在cx中值不為零時跳轉)
當cx≠0時什麼都不做

注意:所有的有條件有條件轉移都是短轉移,且經過編譯之後,機器碼包含了位移範圍
如:EBXX(XX表示位移範圍)
XX是由編譯器編譯的時候執行的
公式:標號處的偏移地址-jmp指令之後的第一個位元組的地址

指令格式:jcxz 標號(如果cx=0,轉移到標號處執行)
操作:當cx=0時,IP=IP+8位位移
八位位移=標號處的地址-jcxz指令後的第一個位元組的地址
八位位移的範圍為-128~127,用補碼錶示;
八位位移由編譯程式在編譯時算出。
當cx≠0時,什麼都不做(程式向下執行)

問題:
補全程式設計,利用jcxz指令,實現在記憶體2000H段中查詢第一個值為0的位元組,找到後,將它的偏移地址存貯在dx中。

assume cs:code

code segment
start: mov ax,2000h
         mov ds,ax
         mov bx,0
 s:     mov cl, [bx]
		 mov ch,0
         jcxz ok
         inc bx
		 jmp short s
 ok:    mov dx,bx
 	   	  mov ax,4c00h
		  int 21h
code ends
end start

在這裡插入圖片描述
除錯時,修改一下記憶體單元的資料
在這裡插入圖片描述