转移指令检测题9
補全編程,利用loop指令,實現在內存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
? ? ? ? ? ? ? inc cx ? ? ? ? ? ?;此處為要填寫的空行 ??
? ? ? ? ? ? ? ?inc bx
? ? ? ? ? ? ? ?loop s
? ? ? ? ? ok:dec bx ? ? ? ? ? ? ?;dec指令的功能和inc相反,dec bx進行的操作為:(bx)=(bx)-1
? ? ? ? ? ? ? ?mov dx,bx
? ? ? ? ? ? ? ?mov ax,4c00h
? ? ? ? ? ? ? int 21h
code ends
end start
還有一個實驗記錄如下:
assume cs:codesg
codesg segment
? ? ? ? ? ?mov ax,4c00h
? ? ? ? ? ?int 21h
start: ? mov ax,0
? ? ?s: ? nop
? ? ? ? ? ?nop
? ? ? ? ? ?mov di,offset s
? ? ? ? ? ?mov si,offset s2
? ? ? ? ? ?mov ax,cs:[si]
? ? ? ? ? ?mov cs:[di],ax
? ? ?s0:jmp short s
? ? ?s1:mov ax,0
? ? ? ? ? int 21h
? ? ? ? ? mov ax,0
? ? ?s2:jmp short s1
? ? ? ? ?nop
codesg ends?
end start
單步調試結果如下:
對應的機器碼如下:
上面是兩張圖,中間有重
程序在跳到S處時,執行完指令后就跳到第一條指令去了。原因是jmp short s1對應的機器碼中給出的位移值,而不是目的地址,從圖中可以看出是F6,等于-10,即當前指令執行完成后IP+2然后-10,回到S1標號處,當把這條指令放到start的下一條語句時,它對應的機器指令指明,IP也應該-10,上移10個位置,所以就到了第一條指令mov ax 4c00h,而不是跳到s1處
轉載于:https://www.cnblogs.com/919czzl/p/4155267.html
總結
- 上一篇: 【learning】洲阁筛
- 下一篇: selenium.common.exce