✅ 本文主要是在汇编考试前的做的复习整理。
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:0000H∼3800H:FFFFH,可计算得到物理地址
38000
H
∼
47
F
F
F
H
38000H\sim47FFFH
38000H∼47FFFH。 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+(212−1)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 8∗212B+(212−1)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夺冠 ⭐️ ⭐️