附录 - 汇编指令

mov 指令

mov 指令用于数据传送。

mov	目的操作数	,	源操作数据

mov 寄存器/内存	,	寄存器/内存/立即数

⚠️ 不支持的MOV操作:
1、Intel 的处理器不允许将一个立即数传送到段寄存器;

	mov ds,0x99				; //不允许
	
	;// 正确的做法
	mov ax,0x99
	mov ds,ax

2、不能使用mov修改 IP 寄存器值;

	mov ip,0x99				; //错误

3、不允许在两个内存单元之间直接进行传送操作;

	mov [0xb800],[0xb801]	; //不允许

4、目的操作数 和 源操作数据的数据宽度必须相同;

	mov ds,al				; //不允许
	mov bx,al				; //不允许
	mov al,bx				; //不允许

指令的目的操作数或源操作使用了寄存器,编译器就可以判断传输数据的位数,否则需要显式指定:

	mov [0xb800],0x99		; // 不允许,因为无法判断数据长度,0x99可能是0x0099/0x0000099 
	mov byte [0xb800],0x99	; // 告诉编译器 0x99 是 0x99
	mov word [0xb800],0x99	; // 告诉编译器 0x99 是 0x0099
	mov dword [0xb800],0x99	; // 告诉编译器 0x99 是 0x00000099

jmp 指令

转移指令-jmp(跳转指令)实现方式
	|-修改ip
	|-同时修改cs和ip
相对	- 	修改ip值:ip = ip + 地址差值(目标地址 - jmp下条指令的地址)
绝对	- 	替换ip值:ip = 值 

短	-	段内
近	-	段内
远	-	段间

间接	-	不是立即数(内存/寄存器)
直接	-	是立即数

8086处理器的无条件转移指令
	|-"相对"
		|-1、jmp short 目标地址 	;//"相对"短转移,机器码:EB 一个字节地址差值
		|-2、jmp near  目标地址 	;//"相对"近转移,机器码:E9 两个字节地址差值
		|-3、jmp 目标地址 		;
	|-"绝对"
		|-"间接"
			|-3、间接绝对近转移		jmp r/m
			|-4、间接绝对远转移		jmp far	m
		|-"直接"
			|-5、直接绝对远转移		jmp 16位段地址:16位偏移地址

1、"相对"短转移

在这里插入图片描述

	jmp short 目标地址			;机器码:EB 一个字节地址差值

段内转移范围为1个字节有符号数的取值范围:-128 ~ 127

2、"相对"近转移

	jmp near  目标地址 			;机器码:E9 两个字节地址差值

段内转移范围为2个字节有符号数的取值范围:-32768~ 32767

3、绝对间接近转移

	jmp r/m
例:
	jmp cx			;修改ip的值为cx的值
	jmp [0x3000]	;修改ip的值为内存[cs:0x3000]处的值(取两个字节)
	jmp [bx]		;修改ip的值为内存[cs:bx]处的值(取两个字节),如果bx内容为0x3000,则等同于上一条指令

4、绝对间接远转移

	jmp far	m
	
例:
	jmp far [0x2002]	;jmp 0x2004:0x2002
	jmp far [bx]		;jmp bx+2:bx

5、绝对直接远转移

	jmp 16位段地址:16位偏移地址

例:
	jmp 0x052e:0x003c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java硕哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值