【计算机与UNIX汇编原理⑫】——汇编考前复习【重要知识点 + 基础题 + 易错题 + 难题解析】


✅ 本文主要是在汇编考试前的做的复习整理。



EDG 加油!⌨️

上一篇文章链接:【计算机与UNIX汇编原理⑪】——实验报告二【⭐️用户登录验证程序的实现+支持回退功能⭐️】.
下一篇文章链接:【计算机原理与接口技术(UNIX)⑬】——总线概述【总线与总线标准、总线结构、ISA、PCI、IDE】.


第一章:微型计算机基础

  ① 设有两个有符号数 9AH 和 C8H(补码表示),则两数相加的结果是( )H。

  解析:9AH = 1001 1010 B, C8H = 1100 1000 B, 两者相加得 0110 0010 B = 62H,故填 62 (这是补码)。


  ② 十进制数 83 对应的紧凑型(组合)BCD 码数是( )16。

  解析 ( 83 ) 10 = ( 10000011 ) 2 = ( 83 ) 16 (83)_{10} = (1000 0011)_{2} = (83)_{16} (83)10=(10000011)2=(83)16,故答案填 83。


  ③ 设字长 = 8位, X=(8E)16,当 X 为反码时,其真值=( )16

  解析 ( 8 E ) 16 = ( 10001110 ) 2 (8E)_{16} = (10001110)_{2} (8E)16=(10001110)2,正数的反码和原码相同,负数的反码除符号位与原码相同,其他按位取反。故真值 = ( 11110001 ) 2 = ( − 113 ) 10 = ( − 71 ) 16 (11110001)_2 = (-113)_{10}=(-71)_{16} (11110001)2=(113)10=(71)16。另外一种解法是,真值 = ( 11110001 ) 2 = ( − 01110001 ) 2 = ( − 71 ) 16 (11110001)_2 = (-01110001)_2=(-71)_{16} (11110001)2=(01110001)2=(71)16。故答案填 -71 。
  ◆ 注意:② 和 ③ 的区别,一个是要求填 BCD 码,另一个要求填真值。



  ④ 设字长 = 8位,X = (80)16,当X为补码时,其真值的十进制表示为( )。

  解析:这 ( 80 ) 16 = ( 1000000 ) 2 (80)_{16} = (1000 000)_2 (80)16=(1000000)2这个补码有点特殊,大家只要记住,它表示的是真值(十进制)是 -128 即可。详见…



  ⑤ 微型计算机各部件之间是用( )连接起来的。
    A. 系统总线
    B. USB总线
    C. 地址总线
    D. DMA总线

  解析:A.系统总线分为数据总线、地址总线和控制总线三类。 B.错误答案,USB总线属于外部总线 C.答案不完整 D.错误答案。故选 A 。



第二章:80X86微处理器

  ① 若某数据段位于存储区 38000H~47FFFH,则该数据段的段基址可能为( )。
    A. 3800H
    B. 38000H
    C. 3000H
    D. 47FFFH

  解析: A. 3800 H : 0000 H ∼ 3800 H : F F F F H 3800H:0000H \sim 3800H:FFFFH 3800H:0000H3800HFFFFH,可计算得到物理地址 38000 H ∼ 47 F F F H 38000H\sim47FFFH 38000H47FFFH。 B.段基址要求是 16 位的,也就是只能是 0000H ~ FFFFH 中的某一个数。 C.若此段基址正确,则 17FFFH 这个单元的有效地址超过了 FFFFH (因为在实模式下,一个逻辑段的大小为 64KB )。D.错因同B 。故选 B。


  ② ‎80X86 工作在实模式下时,每个物理存储单元对应唯一的物理地址,其范围是0 ~ ( )H。

  解析: 在实模式下,我们会把 1M 字节的存储器分为任意数量的逻辑段,其中每一段长度为 64K(216)个字节。段的起始地址的高 16 位地址称为该段的段基址。段内再由 16 位二进制数寻址,段内寻址的 16 位二进制数地址是存贮单元到段起始地址的距离,称为偏移地址(偏移量)。注:这里我想提到一点, 1MB 的空间最多能分出 16 个逻辑段,只是段基址的取值范围是 0000H ~ FFFFH。所以所以这里填 “FFFFF”。


  ③ ‎设有存储空间范围 3000H ~ BFFFH,则其对应的存储容量是_______。

  解析: 两者相减为 8 F F F H = 8000 H + F F F H = 8 × 2 12 B + ( 2 12 − 1 ) B 8FFFH = 8000H + FFFH = 8 \times 2^{12}B + (2^{12} - 1)B 8FFFH=8000H+FFFH=8×212B+(2121)B但这个是问存储空间,3000H 也算存储空间(比如说: 0B ~ 1B, 有两个字节的存储空间)所以存储空间为 8 ∗ 2 12 B + ( 2 12 − 1 ) B + 1 B = 36 K B 8 * 2^{12}B + (2^{12} - 1)B + 1B = 36KB 8212B+(2121)B+1B=36KB。故填:36KB



第三章:汇编语言指令集

  ① 以为 216 为模,将 C678H 和 6398H 相加,写出十六进制和数,以及 A、C、O、P、S、Z 六种状态标志的值。

  解析:C678H = 1100 0110 0111 1000 B,6398H = 0110 0011 1001 1000 B,两者相加的结果为 0010 1010 0001 0000 B = 2A10H。因为 D3 向 D4 位有进位,所以 AF=1;最高位有进位,所以 CF=1;加数最高位和被加数最高位不同,所以 OF=0;运算结果低 8 位 10H 中 1 的个数为奇数个,所以 PF=0;运算结果最高位为 0,所以 SF=0 ;运算结果不等于 0,所以 ZF=0。故答案为:2A10H 1 1 0 0 0 0


  ② 下列指令中,错误的指令条数为( )条。
  INC [BX]、MOV AL,[DX]、PUSH CS、MOV DS,DATA(DATA是数据段段名)

  解析:INC [BX] 指令错误原因是没有在操作数前加上 PTR 运算符; MOV AL,[DX]指令错误原因是不能用 DX 作为间址寄存器,可以用“BX、SI、DI”等;MOV DS,DATA指令错误是因为立即数不能直接送给段寄存器。另外,在汇编程序中,通常可以通过 PUSH 指令将指定寄存器内容放入堆栈中保护,也可以通过 POP 指令将堆栈中的内容装入寄存器,而对于代码段寄存器 CS,用户程序只有 PUSH CS 操作,如写出 POP CS,编译程序会报错。这是因为随意变更 CS 寄存器内容,会造成程序跑乱,很可能造成系统瘫痪。故填 3。


  ③ 把首地址为 BLOCK 的字数组的第 3 个字送到 AX 寄存器的指令是______________。

  解析:如下图所示,因为是 BLOCK 存储的是 “字”(1 word = 2 byte),而一个存储单元的大小为 8 bit(即 1 byte)。又因为有 “低位→低地址”、“高位→高地址” 的规则。所以地址为 “BLOCK+1” 的内存单元装的是第一个数据,地址为 “BLOCK” 的内存单元装的才是第二个数据。以此类推。故答案填:MOV AX,BLOCK+4

在这里插入图片描述



  ④ 实模式下,若SP = 2000H,则执行指令 PUSH AX 后,SP=__________H。

  解析:PUSH 指令将源操作数压入堆栈。操作过程是先将堆栈指针向低地址方向进行调整,然后将操作数送入堆栈指针指向的栈顶单元中。当操作数是 16 位字时,堆栈指针的调整方法为 (SP) - 2 → (SP) 。2000H - 2H = 1FFEH,故填 1FFE 。这里易错填为 1998



  ⑤ 用一条指令_________即可完成无符号数乘法,将 AL*BL 结果送至 AX 。

  解析:MUL 指令中,乘数和被乘数必须是无符号数并且字长相等,除了乘数需要显式写出外,被乘数以及乘积均为隐含操作数。乘数为 8 位寄存器操作数或内存操作数,被乘数默认放 AL 中,得到的 16 位乘积送入AX 中。故填:MUL BL。关于 MUL 指令相关操作,详见链接: 【计算机与UNIX汇编原理⑤】——指令系统(下)【 2万5千字总结 】.



  ⑥ 已知某数据段定义如下:

W1   DB 32H,20H
W2   DW -1,4130H
W3   DB '3AC5'

  执行 MOV CX,WORD PTR W1 指令后,CX 的内容为_______H, 执行 MOV BX,W2+3 指令后,BX 的内容为_______H。

  解析:在存储空间中,“32H” 位于低地址,“20H” 位于高地址(相对于前者而言),故 CX = 2032H。因为存储空间中的内容是顺序存放的, W2 的 “41H” 所在的存储单元紧邻的下一存储单元即是 W3 的 ‘3’。41H 位于低地址(相对于后者而言),‘3’ 位于高地址(相对于前者而言)。故 BX = 3341H。故填:2032、3341



  ⑦ 执行下列指令后,AX寄存器中的内容是_______H。

TABLE DW 10,20,30,258,50
ENTRY DW 3
   ┇
MOV BX,OFFSET TABLE
MOV SI,ENTRY
MOV AX,[BX+SI]

  解析: TABLE 单元内容依次为 0AH,00H,14H,00H,1EH,00H,02H,01H,32H,00H。因此 [BX+3] 字单元内容为 1E00H 。易错点:这里的 10、20、30、40、50 是十进制数,而答案要求填的是十六进制。



  ⑧ 以下指令格式正确的是( )。
    A. MOV DL, 12FH
    B. LEA AX,15
    C. PUSH AL
    D. MOV DX, CS

  解析: C、MOV DL, 12FH 错误原因是 DL 是8位寄存器,而 12FH 已经超过 8 位。LEA AX,15 错误原因是 LEA 是获得内存单元的偏移地址,所以源操作数必须是内存单元,不能是立即数。PUSH AL 错误原因是进栈和出栈至少 16 位。



  ⑨ 设AX = 2345H,BX = 98A0H,阅读下列程序段,完成相应空格。

MOV SP,0100H
PUSH AX
PUSH BX
MOV BP,SP
MOV BX,[BP+2]
POP CX
POP AX 

  该程序段执行后,SP=______H ,AX=_____H,BX=______H ,BP______H,CX=________H。

  解析

MOV SP,0100H
PUSH AX				; 此时 SP = 0100H - 2H = 00FEH
PUSH BX				; 此时 SP = 00FEH - 2H = 00FCH
MOV BP,SP			; 此时 BP = 00FCH
MOV BX,[BP+2]		; BX = [BP+2] = [00FEH] = AX = 2345H
POP CX				; CX 得到的是此时堆栈顶的数据, 即 BX,98A0H, 而且 POP 后, 栈顶的元素也会相应地弹出, SP 也会自动 + 2H
POP AX 				; AX = 2345H, SP = 0100H
"故答案填: 0100、2345、2345、00FC、98A0"



  ⑩ 已知当前CF=1,执行下列指令序列后,CF=,BL=_ H。

  解析如下

MOV BL,27H		;  BL = 0010 0111 B
ROL BL,1		; 不含进位的左移 1 位 → BL = 0100 1110 B = 4EH, CF = 0
ROR BL,3		; 不含进位的右移 3 位 → BL = 1100 1001 B = C9H, CF = 1
"故答案填:1、C9"


第四章:汇编语言程序设计

  ① 若用户执行该程序段,从键盘输入字符串 ‘ABCDE’ 并回车后,BUF+1 字节单元的内容是______H;BUF+2 字节单元的内容是______H;BUF+7 字节单元的内容是__________H。

数据段: BUF  DB  15, ?, 15 DUP(?)
代码段: MOV  AH, 0AH
MOV DX, OFFSET BUF
INT  21H

  解析:用户键入回车之后,由 0AH 功能把实际键入的字符个数(不包括回车符)写入 BUF+1 单元。键入的字符串从 BUF+2 单元开始依次存放。而 BUF 单元存放的是预定义的字符个数(包含回车键 0DH ,该样例为 15 个)。故答案为:5、41、0D。



  ② 阅读下面程序段:

		MOV  DL,0
		MOV  CX,8
		MOV  BL,100
​AGA:   	MOV  AL,30H     
​       	SHR  BL,1 
	​   	JNC  NEXT
​       	MOV  AL,31H            
​NEXT:  	RCL  DL,1
​       	MOV  AH,0EH
​       	INT  10H 
​       	LOOP AGA

  执行本程序后 DL =_______ H;屏幕上显示内容为________。

  解析:该程序段是将 BL 中的数据按逆序排列送给 DL,并在屏幕上以二进制格式显示。其中 100 的十六进制为 64H = 0110 0100 B。然后 30H 对应的正好是 ‘0’,31H 对应的是 ‘1’。JNC 表示 “C 标不为零就跳转”。故答案为:26、00100110



  ③ ASSUME 伪指令的功能是将各段寄存器装入实际值(),判断对与错。

  解析:ASSUME 伪指令的功能是用来指示程序中各实际的段和各段寄存器之间的关系,并不给段寄存器赋值。



  ④ 指令性语句在汇编时被翻译成________指令。伪指令语句在汇编时由_________执行。

  解析:指令性语句在汇编时被翻译成机器指令。伪指令语句在汇编时由汇编程序执行。
    ● 汇编语言源程序包括的语句类型为:指令性语句和指示性语句。
    ● 指令性语句即为通常所说的符号指令。符号指令:经汇编后,其机器指令通知 CPU 进行什么操作。
    ● 指示性语句包括伪指令和宏指令。 伪指令:是非机器指令,是在汇编链接期间进行操作的,其为汇编程序,链接程序提供汇编链接信息;宏指令是汇编语言提供的伪指令,它是用户自行定义的若干指令的集合。
  故填:机器、汇编程序



  ⑤ 阅读程序并回答问题:

.586							
DATA   SEGMENT USE16
BUF    DB 'ABCDEFGH'
L      EQU  01110001B
RESULT DB 8 DUP(?)
DATA   ENDS
CODE   SEGMENT USE16
ASSUME CS:CODE,DS:DATA
BEG:    MOV AX,DATA
        MOV DS, AX
        MOV SI,OFFSET BUF
        MOV DI,OFFSET RESULT
        MOV CX,8
        MOV DL,L
LAST:   ROL  DL,1			; 不带进位的循环左移
        JNC  FILL
        MOV  AL,[SI]
        JMP  NEXT
FILL:   MOV  AL,0FFH	
NEXT:   MOV  [DI],AL
        INC   SI
        INC   DI
		LOOP LAST
		MOV AH,4CH
		INT 21H
CODE  ENDS
END  BEG

  程序执行后,RESULT、RESULT+1 和 RESULT+2 单元中的内容分别为_________H、________H和__________H。

  解析: 该程序段的功能是判断 L = 01110001 从最高位开始每一位是 0 还是 1,如果是 0,就将字符串 ‘ABCDEFGH’ 对应位置的字符 ASCII 码存入 RESULT 数组的对应位置,否则就将 FFH 存入 RESULT 数组的对应位置。故答案为:FF、42、43



  ⑥ 下面的程序是将用户键入的字符串再次显示在屏幕上,请补充完整:

.586
DATA 	SEGMENT USE16
BUF  	DB 30,?,30 DUP(?)
DATA 	ENDS
CODE 	SEGMENT USE16
      	ASSUME CS:CODE,DS:DATA
BEG: 	MOV AX,DATA
        MOV DS,AX
     	MOV AH,0AH
        LEA _____________
        INT 21H					; 键入字符串
        MOV BL,__________
        MOV BH,0
        MOV SI,OFFSET BUF+2
        MOV _______________,’$’
        MOV AH,9
        MOV DX,OFFSET BUF+2
        INT  21H
 EXIT:	MOV AH,4CH
        INT 21H
CODE  ENDS
END   BEG

  解析: LEA DX,BUF 是将 BUF 单元的偏移地址 → DX 作为 0A 号 DOS 功能调用的入口参数。 MOV BL,BUF+1 是将键入字符的个数 → BL。MOV BYTE PTR [BX+SI],‘$’,是将 ‘$’ 结束符存放到字符串的最后。在调用功能号 0AH (调用指令INT 21H)时,有些东西要注意,详见本章的 ① 题。故答案为:DX,BUF、BUF+1、BYTE PTR [BX+SI]



  ⑦ 阅读下面程序段,并回答问题。

		MOV AX, 0E410H
		MOV BL,0
NEXT:  	CMP AX,0
​        JZ FIN
​        SHR AX,1
​        JC BH1
​       	INC BL
BH1:   	JMP NEXT
FIN:  	...

  该程序段执行后BL = ________H。

  解析: 该程序用于统计 E410 中 0 的个数。故填 0B 。



五、参考附录

[1]《微型计算机原理与接口技术(慕课板)》
清华大学出版社

[2]《汇编语言程序设计(第2版)》

[3]《微型计算机原理与接口技术实验指导(第2版)》

[4]《ASCII码一览表,ASCII码对照表》
链接: http://c.biancheng.net/c/ascii/.

[5]《汇编指令英文全称》
链接: https://blog.csdn.net/chenlycly/article/details/52240792.

上一篇文章链接:【计算机与UNIX汇编原理⑪】——实验报告二【⭐️用户登录验证程序的实现+支持回退功能⭐️】.

下一篇文章链接:【计算机原理与接口技术(UNIX)⑬】——总线概述【总线与总线标准、总线结构、ISA、PCI、IDE】.


EDG夺冠 ⭐️ ⭐️

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一支王同学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值