发布网友 发布时间:2022-04-24 23:54
共1个回答
热心网友 时间:2023-10-15 07:12
标准机器代码示例
1/2字节 0/1字节 0/1/2字节 0/1/2字节
操作码 mod reg r/m 位移量 立即数
mov ax,[BP+0] ; 机器代码是 8B 46 00
•前一个字节8B是操作码(含w=1表示字操作)
•中间一个字节46(01 000 110)是 “mod reg r/m”字节
–reg=000表示目的操作数为AX
–mod=01和r/m=110表示源操作数为[BP+D8]
•最后一个字节就是8位位移量〔D8=〕00
8086指令系统概述
•Intel 8086指令系统共有二万多条指令,用了一百多个助记符 ,可分成6类功能组:
① 数据传送类指令
② 算术运算类指令
③ 逻辑运算(位操作)类指令
④ 串操作类指令
⑤ 控制转移类指令
⑥ 处理机控制类指令
学习指令的注意事项
•指令的功能——该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式
•指令支持的寻址方式——该指令中的操作数可以采用何种寻址方式
•指令对标志的影响——该指令执行后是否对各个标志位有影响,以及如何影响
•其他方面——该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等
指令格式的通用规定
•双操作数指令,除串操作指令外,不允许两个都是存储器。
•立即数,CS不能做目的操作数。
•IP不能显示地用做操作数。
1.数据传送类指令
•数据传送是计算机中最基本、最重要的一种操作
•传送指令也是最常使用的一类指令
•传送指令把数据从一个位置传送到另一个位置
•除标志寄存器传送指令(SAHF,POPF)外,均不影响标志位
•重点掌握 MOV PUSH POP XCHG IN OUT XLAT LEA
传送指令MOV(move)
1.立即数送寄存器或主存 MOV reg/mem , im
mov al , 4 ; al←4,字节传送
mov cx , 0ffh ; cx←00ffh,字传送
mov si , 200h ; si←0200h,字传送
mov byte ptr [si] , 0ah ; byte ptr 说明是字节操作
mov word ptr [si+2 ], 0bh ; word ptr 说明是字操作
# 注意立即数是字节量还是字量
# 明确指令是字节操作还是字操作
2.寄存器送(段)寄存器或主存 MOV reg/mem/seg , reg;
mov ax , bx ; ax←bx,字传送
mov ah , al ; ah←al,字节传送
mov ds , ax ; ds←ax,字传送
mov [bx] , al ; [bx]←al,字节传送
3.主存送(段)寄存器 MOV reg/seg , mem;
mov al , [bx]
mov dx , [bp] ; dx←ss:[bp]
mov es , [si] ; es←ds:[si]
# 不存在存储器向存储器的传送指令
4.段寄存器送寄存器或主存 MOV reg/mem , seg;
mov si , ds
mov ax , es ; ax←es
mov ds , ax ; ds←ax←es
# 对段寄存器的操作有一些*MOV指令传送功能:
非 法 传 送 种 种
1.两个操作数的类型不一致 –-----例如源操作数是字节,而目的操作数是字;或相反
• 绝大多数双操作数指令,除非特别说明,目的操作数与源操作数必须类型一致,否则为非法指令 MOV AL , 050AH;非法指令:050Ah为字,而AL为字节
• 寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型
• 对于存储器单元与立即数同时作为操作数的情况,必须显式指明;
byte ptr 指示字节类型 , word ptr 指示字类型。
2.两个操作数不能都是存储器 –------传送指令很灵活,但主存之间的直接传送却不允许
• 8086指令系统不允许两个操作数都是存储单元(除串操作指令),要实现这种传送,可通过寄存器间接实现
mov ax , buffer1;ax←buffer1(将buffer1内容送ax)
mov buffer2 , ax;buffer2←ax;这里buffer1和buffer2是两个字变量、;实际表示直接寻址方式
3.段寄存器的操作有一些* –----段寄存器属专用寄存器,对他们的操作能力有限
• 不允许立即数传送给段寄存器 MOV DS,100H;非法指令:立即数不能传送段寄存器
• 不允许直接改变CS值 MOV CS,[SI] ;不允许使用的指令
• 不允许段寄存器之间的直接数据传送 MOV DS,ES;非法指令:不允许段寄存器间传送