第4章 汇编指令

考点1:指令格式及功能

一、指令格式

二、指令类型

   	(一)传送类:
    		MOV PUSH POP LEA

    (二)算数运算:
    		加 ADD ADC INC
 	      	减SUB SBB DEC CMP NEG
    	   	扩展 CBW, CWD
  
    (三)位操作:
    		AND OR NOT XOR  TEXT ROR ROL RCR RCL SHL SHR SAL SAR 
    
    (四)控制转移:
  			 大于小于   有符号  无符号,JC JZ JS
    
    (五)串操作类:
    		 3个
    
    (六)处理机类: 
    		CLI , STI  CLC , STC 
MOV AX, [DI+BX]    # X 基址+变址

MOV AX,[DX]       #X [内只能放BX BP SI DI ]

ADD AL, BX     # x    字长不统一

PUSH AL				#push pop 必须对  字

MOV AL, BX       #长度不统一

PUSH 1000H	#单操作数 不能直接用立即数
			 MOV AX ,1000H
			 PUSH AX	

ADD AL, BX	# X  类型不一致

MOV [BX], SI    #将si的值 存入 BX指向的内存单元 写操作

SUB[BX], [SI]     # X 两操作数不能同时为内存操作数
							MOV AX,[BX]
							SUB AX,[SI]
							MOV [BX],AX
CMP 5, AL

MOV CX, AX

LEA  BL, A;(A为变量名)  #X     类型不一致   LEA  A,BL
  
SHR     AL, 6   # X 移位次数大于1时应存放在CL中      
							MOB  CL,6
							SHR AL,CL

MOV  AL, [DI+SI]  #错  DI SI 不能同时使用
								MOV AL,[DI+SP]	
								MOV AL,[SI+BP]

MOV  BL, 200H   	#错 两操作数类型不一致,200H超出字节的范围
									MOV BX ,200H
	
MOV   AX, DATA(DATA为段名)  #对 

INC[BX]#
				INC  Byte PTR[BX];     #12 +1
				INC Word  PTR [BX];   #3412H+1

CMP[BX], A;A为变量   #X    两操作数不可同为内存中的数

MOV AX, '+'    ;AX=ASCII值

MOV AX, [BP+BX]#错, BP和BX不可同时使用在寻址方式中

ADD AX, [CX]
#错, cx不能作为寄在器间接寻址
OUT 400, AL #
								MOV  BX,400
								OUT	AD,AL
						pot:字节{00H~FFH  0-255}
						port:字  {0100H-FFFFH   一定用间,port_DX中 }
					 out port,AL/AX    逗号前面一定是口地址   输出 写 端口 地址
					 IN   AL/AX,port      将接口上的信息送往cpu

JNC P    ; 标号

MOV BX, OFFSET	A  ;  取有效地址   将 A的有效地址 给了BX 
 
LEA	DI, A[SI]		;取有效地址     A+SI的值作为 有效地址 给了 DI

CMP	AX, 5    对 

CMP  AL,5   ;   差值 不会返回结果  只用于 比较

寻址

 立即数
 	MOV AX,5
 寄存器寻址
 直接【地址值】
 间接寻址
 	[R:BX BP SI DI]
 寄存器相对寻址
 		【R+位移量】
 基址变址寄存器
 		【BX/BP+SI/DI】
 相对基址变址
 		[基+变+位移量]-

考点1总结

1.操作数的个数:
2.指令功能:下列各组指令有何区别?
已知 BX=2000H

OR AX, OFFH ; 立即数寻址

OR AX, [OFFH]; 直接寻址

MOV AX,BX ; 寄存器寻址 AX=2000H

MOV AX,[BX]; 寄存器间接寻址 AX=1234H

LEA BX,MESS BX-2000H

MOV BX,MESS BX=1234H

LEA BX, MESS ; 等效

MOV BX, OFFSET MESS ;等效

MOV AL, 0 ; MOV 不影响任何标志位

XOR AL, AL ;AL =0 ,CF=0 ,OF=0

ADD AX, AX ; AX ——2AX 影响 6个状态位

SAL AX, 1 ;左移一位 X2 移除的位 进入 CF

ADD AL, 1

INC AL ; 不影响 CF

SUB AX, CX AX-CX 的 差 给AX

CMP AX, CX AX值不变

  1. 隐含寻址:
    (1) IN/OUT: AX、 DX 不能有 其他寄存器
    (2) MUL/DIV: AL、 AX、 DX
    (3) CBW/CWD: AL、 AX、 DX
    (4) LOOP: CX
    (5) DOS中断调用:入口或出口参数

  2. 比较指令MOV BX, BUF 与LEA BX, BUF

  3. 比较指令OR BL, OFH 与AND BL, OFH

  4. 或 已知BL=12H
    OR BL,OFH
    00010010
    00001111
    00011111
    BL=1FH
    与 【清0指令】
    0001001
    00001111
    00000010
    BL=02H

  5. 3.比较指令MOV AX,BX 与MOV AX,[BX]

  6. 4.比较指令MOV AX,[BX+DI] MOV AX,[BP+DI]

  7. 出现BP用SS

考点2:指令执行后对标志位的影响

(1) INC 和 DEC:
不影响CF,其它状态位影响
(2) MUL
CF=OF=0 乘积的高一半为0
CF=OF=1 乘积的高一半不为0
IMUL
IMUL:CF=OF=0 乘积的高一半为低一半的符号扩展
:(3) AND、 OR、 XOR、 TEST:
CF=OF=0 , AF无定义
(4)移位指令:
CF:移出的位
OF:移位数为1时,移位后最高位与CF不同,则OF=1,否则为0
(5)传送类、符号扩展、无条件、条件转移,循环转移,INT, NOT
不影响任何状态位

考点3:指令的寻址方式

寻址方式:

写出各操作数的寻址方式,计算存储器操作数有效地址(有题需要计算物理地址)

1.设BX=2000H, SI=3000H,指令MOV AX, [BX+SI+8]
a EA=BX+SI+8=5008H
b物理地址 PA =1000HX16+5008H=15008H

  1. DS=1000H, ES=2000H, BX=3000H,指令ADD AL, [BX]
    a EA=BX=2000H
    b = PA=DSX16+EA =12000H

3.设DS=2000H, ES=3000H, SI=200H,指令MOV ES: [SI], AL
a EA=SI=200H
b PA=ESX16+EA=3-200H

  1. ADD[BX+SI], AL
    a EA=BX+SI
    b PA=DSX16+EA=
    c (PA )_ 字节 +al 的和 给 pa
    总线操作需要3次 取指 取数+al 和 送回内存

  2. SUB BX, A[SI]
    两个总线周期
    a EA=SI+A
    b PDSX16+EA

  3. MOV AX, BUF
    两个总线周期
    a EA=buf
    b PA=DSX16+EA

  4. CMP AL,5 立即数 占用两个字节

8.已知AX=14FOH ,’ BX=035CH , SI=1200H,DS=2000H, (2155CH) =7000H, (215A2H)=75A2H,(215AOH) =7726H,则执行指令ADD AX, [BX+SI+46H]后,AX=8A92H, BX=035CH,ZF=0
a EA=BX+SI+46H=035CH+1200H+0046H
15A2H
b PA=DSX16+EA=215A2H

c AX=14F0H, (215A2H)=75A2H

d 求和: ALU中 14F0H+75A2H = 8A92H

先 计算出 有效地址
通过有效地址 计算 物理地址
通过物理地址找出 单元地址 再通过 AX的值 与 单元地址求和

数据段中有以下定义:

ARRAY1 EQU 16H ; 符号名,EQU定义不占内存

ARRAY2 DW 16H ;变量 占用内存

请指出下面两条指令的寻址方式:
MOV AX, ARRAY1 ;寻址方式 立即数
MOV AX, ARRAY2 ;寻址方式 直接寻址

专项练习 2. 选择题

(1)用一条指令实现将BX+SI→ AX的方法是( )。
A. XCHG AX, [BX][SI]
B. MOV AX, [BX+SI] ;[MOV 是将 【的内容给了AX】]
C. LEA AX, BX[SI]
D. LEA AX, [BX][SI]

(2)在下列指令中, ()指令的执行会影响条件码中的CF位。
A. JMP NEXT
B. JC NEXT
C. INC BX
D. SHL AX,1 [左移指令影响CF 移出的位 移进CF CF=0正 CF=1负]
SHR AX,1 CF=1,D0=1 奇数
CF=0.D0=0 偶数
通过左移 就可以判断出 结果是正或者负


统计AX中1的个数

L2:SHL AX,1
JNC L1 ; CF-0转L1

L1::LOOP L2

(3)条件转移指令JB产生程序转移的条件是( )。

A. CF=1
B. CF=0
C. CF=1和ZF=1[如果是JB选A JBE选C JA时选C]
D. CF=1和ZF=0

CMP AX,BX
JB	L1;  当AX<BX时转L1

另外一种情况

CMP	AX,BX
JBE	L1

条件转移

		JB:无符号小于时转
		JA:  大于时
		
		JL : 有 符号 小于时转
		JG		大
(3)条件转移指令JB产生程序转移的条件是()
A. CF=1			【JB】
B. CF=0				[JA]
C. CF=1和ZF=1     【JBE】
D. CF=1和ZF=0

JBE   小于等于转
	CMP	AX=<BX
	JBE	L1

(4)条件转移指令JNBE产生转移的条件是( )。
A.CF=0且ZF=0
B.CF=0且ZF=1
C.CF=1且ZF=0
D.CF=1且ZF=1

(5)循环指令LOOPNZ终止循环的条件是( D)。
A.CK=0,且ZF=0
B.CX=0,或ZF=1
C.CX≠0,且ZF=0
D.CX≠0,或ZF=1

LOOP	L1; CX≠0时转L1
				CX=0时  结束循环

LOOPZ	L2    ;  CX≠0时且ZF=0时 转L2
								CX=0 或 ZF=1 退出
LOOP≠Z   L3	;	CX≠0且  ZF=0 时 转L3
								CX=0或者 ZF为1 时  退出   

6)下列逻辑运算指令中,不允许使用立即数为操作数的指令为(D)。
A. AND[双] B. OR[双] C. XOR[双] D. NOT[单]

(7)若将BL寄存器中的D1、D3、D4和D6位取反,应使用(C)

[BL=D 7 6 5 4 3 2 1 0]
FFH=1 1 1 1 1 1 11
1 0 1 0 0 1 01

A. AND BL, 5AH ;清 0
B. OR BL, 5AH ;置一
C. XOR BL, 5AН ; 取反
D. TEST BL, 5AH ;测试

(8)在下列指令中,不影响堆栈内容的指令是(C)。

A. PUSH 【入栈】
B. RET 【返主】
C. JMP 【无条件转移指令 】
D. CALL【调子】

(9)当执行指令ADDAX, BX后,若AX的内容为2BAOH,设置的奇偶标志位PF=1【偶校验】,下面的叙述正确的是( D)。
A.表示结果中含1的个数为偶数
B. 表示结果中含1的个数为奇数
c. 表示该数为偶数
D.表示结果中低八位含1的个数为偶数

0010101110100000
低8位 1的个数为偶数

(10)设DS=1100H, (12000H) =80H, (12001H) =20H, (12002H) =30H,执行 MOV AX, [1000H]则AX=©。
A.8000H
B.0080H
C.2080H
D.8020H

EA=1000H
PA=12000H
12000 H [80]
1201H [20]
12002H [30]

(11)已定义数据段,

DATA SEGMENT
	ORG 0213H				;定义下一个内存单元的有效地址
	**DA1** DB 15H, 34H, 55H    ;在DA1地址定义了 3个字节变量
	ADR DW **DA1** ;*ADR DW 0213H*
DATA ENDS

下述语句能使AX中数据为偶数的语句是()
A. MOV AX, WORD PTR DA1
B. MOV AL, DA1+2
C. MOV AL, BYTE PTR ADR+1
D. MOV AX, WORD PTR DA1+2

(12)数据段有如下语句:

ORG 0435H

DA1 DB 17H, 44H, 77H

ADR DW DA

1下述语句能使AL中的数据为偶数的是(B)
A. MOV AX, WORD PTR DA1
B. MOV AX, WORD PTR DA1+1
C. MOV AX, ADR
D. MOV AL, BYTE PTR ADR

简述分析题

(1)对于乘法,除法指令,其目的操作数存放在AXDX:AX,而其源操作数,可以用除立即数以外的任一种寻址方式。

MUL   OPR   ; 如果是字节的话 ALXOPR  为字 存放到AX中
						  如果是 字        AX X OPR  为双字 32位   【DX:AX】  DX为高16位

(2)试比较以下几条指令的功能。

MOV BX, SI  ;  寄存器寻址
MOV BX, [SII   ;寄存器间接寻址
MOV BX, OFFSET[SI]  ;有效地址给BX
LEA BX, [SI]	;有效地址给BX

LDS	BX, [SI]   ;取两个字   1送BX   2送DS
LES	BX, [SI]

答:
MOV BX, SI ;将SI的值送给BX
MOV BX,[SI];将SI的值作为偏移地址找到对应的内存单元中的值送给BX
MOV BX,OFFSET[SI];将SI的值作为偏移地址找到对应内存单元的偏移地址送给BX,即SI的值送给BX
LEA BX, [SI] ;将SI的值作为偏移地址找到对应内存单元的偏移地址送给BX,即SI的值送给BX
LDS BX, [SI] ;将SI值作为偏移地址找到对应内存单元中的第一个字值送给BX, 第二个字值送DS
LES BX,[SI] :将SI值作为偏移地址找到对应内存单元中的第一个字值送给BX,第二个字值送ES

考点4:阅读、编写汇编语言程序段

专项练习,三、程序段:

7.执行上述指令序列后, AL=**00H** -, AH=**7EH**  BH=  **FEH**
MOV AX, OFFFFH  ;  AX=0FFFFH
AND AL, 0				;AL=FFH 与 0 相与 11111111与0==   AL=0
XOR AH, 80H			; AH FFH 与 80H进行异或       1111111111111111与10000000=AH=7FH
MOV BH, AH		;将AH的值给BH,BH=7FH
SHL BH, 1			;将BH左移一位  (二进制) 11111110  =  BH =FEH

8,下面程序段完成的功能是什么?
MOV AX, X ; X=1234H
MOV DX, Z ; Z=5678H
SHR DX, 1 ; ;Z=2B3CH
RCR AX, 1 ; 考虑进位标志位的情况下移除

功能是 32位数据循环移位

9,下面程序段执行后AX=, CF=

XOR AX, AX     :将AX寄存器的内容与自身进行异或操作,这将将AX寄存器的所有位设置为0。
MOV AX, 6342H ;将16位立即数0x6342加载到AX寄存器,所以现在AX的值为0x6342。
MOV CX, 0404H :将16位立即数0x0404加载到CX寄存器,所以CX的值为0x0404。
ROL AH, CL  :将AH寄存器(AX的高字节)向左循环移位,移位位数由CL寄存器的低8位确定。在这里,CL的值为0x04,所以AH寄存器向左移位4位。由于初始情况下AH为0x63,左移4位后,AH的值变为0x36。
XCH CH, CL;交换CH和CL寄存器的值,所以CH现在的值为0x04,CL的值为0x36。
ROR AL, CL:将AL寄存器(AX的低字节)向右循环移位,移位位数由CL寄存器的低8位确定。在这里,CL的值为0x36,所以AL寄存器向右移位36位。由于初始情况下AL为0x42,向右移位4位后,AL的值变为0x24(因为循环移位会将移出的位再次移回来)。

AX = 0x3624
CF = 0(没有进位发生,因为ROR指令是循环移位,没有位被移出)。
所以,AX的值为0x3622,CF的值为0。

10.现有程序段如下:
MOV AX,1
MOV BX, 2
MOV CX, 4
MOV DX, 3
L: INC AX
ADD BX, AX
SHR DX, 1
LOOPNZ L
请回答: (1)该程序段的循环次数是多少?
(2)该程序段执行完后AX=3, BX=7, CX=2, DX=0

一、填空题
1,汇编语言源程序至少须有一个___代码段
2. 程序结束伪指令是___end
_
3. 过程定义伪指令是__过程名 proc 过程名 endp_____
4.用CBW指令生成双倍长数据,存放在__AX__中,用CWD生成双字放在_DX,AX_____中。
5,指令中数据的寻址方式是指寻找__操作数___的方式
6,用Dw语句定义的一个字1234H的语句是
DW 1234H
7,用DB定义一个字1234H的语句是
DB 34H,12H
4. 一个机器指令包括___操作码_和操作数两部分。

8,下述指令序列运行后, BX的内容是 **0002**
DATA SEGMENT		;没有ORG定义 默认内存单元偏移地址从 0000H开始
		TA1 DW 0102H, 0304H, 0506H ;从变量TA1内存单元中连续存放3个字数据
		TA2 DB 02H, 03H, 04H ;在TA1 存放的数据后 存放3个字节数据
		
			MOV BX, DS: [0006H];将地址0006H的字数据给BX 此时BX=0302H
			AND BX, OFFH;将0302H与0FFH相与,结果为0002H
			AND BH, [BX]   ; 将BX内存单元的内容0002H的BH=00H BL=02H   取的内容是04H

9.数据段定义如下:
ORG 0020H
BUF DB 3,4,‘34’
ARR DW 3,43,4
NUM EQU ARR-BUF
①该数据段占用的存储字节数是
② NUM的值是

  • 35
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YJlio

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

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

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

打赏作者

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

抵扣说明:

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

余额充值