汇编语言(王爽)9章jmp指令

六眼飞鱼酱① 提交于 2020-02-09 01:26:42

jmp short 标号
jmp near ptr 标号
jmp far ptr 标号
jmp 16位reg,如jmp ax
jmp word ptr 内存单元地址
jmp dword ptr 内存单元地址
详情百度https://www.jianshu.com/p/c685c1c033ff

若要使程序中的jmp指令执行后,CS:IP指向程序的第一条指令,在data段中应该定义哪些数据?
若要指向第一条指令,则要使IP的值为0000H即可,而jmp word ptr为段内转移指令,相当于把IP值赋值为后面内存单元的值,故只需要[0001]处的字是0即可。
即[0001]和[0002]处的字节都是0。
使用t单步执行,可以发现程序进入死循环。

assume cs:code
data segment
	?						//db 'x',0,0,'x'
data ends

code segment
	s:mov ax,data
	mov ds,ax
	mov bx,0
	jmp word ptr [bx+1]

	mov ax,4c00h
	int 21h

code ends
end s

(2)补全程序,使得jmp指令执行后,CS:IP指向第一条指令
由于执行jmp指令后指向第一条指令,CS段没有改变,只需要改变IP值为0000H。而段间转移相当于把内存地址开始的前两个字节赋值给IP,后面的两字节赋值给CS,按顺序填入0和CS值即可。

assume cs:code
data segment
	dd 12345678h
data ends

code segment
	s:mov ax,data
	mov ds,ax
	mov bx,0
	mov [bx],?					//bx
	mov [bx+2],?				//cs
	jmp dword ptr ds:[0]

	mov ax,4c00h
	int 21h

code ends
end s
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!