汇编语言程序设计练习题
一、单项选择题:在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.CPU要访问的某一存储单元的实际地址称()
A.段地址B.偏移地址
C.物理地址D.逻辑地址
2.某存储单元的物理地址是12345H,可以作为它的段地址有()
A.2345H B.12345H
C.12340H D.1234H
3.执行后使BX=0的同时也使CF=0,OF=0的指令是()
A.XOR BX,BX B.OR BX,BX
C.AND BX,BX D.CMP BX,BX
4.循环控制指令LoopNZ/LoopNE控制循环继续执行的条件是()
A.CX≠0且ZF=1 B.CX≠0且ZF=0
C.CX≠0或ZF=1 D.CX≠0或ZF=0
5.在执行DAA指令,当高四位BCD码校正时产生进位,如要把此进位值送入AH中,对这进位值的操作应是()
A.DAA校正指令的功能已自动加在AH中
B.进位值在AF中,校正后根据AF内容再加在AH中
C.进位值在CF中,校正后根据CF内容再加在AH中
D.进位值在AL最高位上,校正后根据AL最高位内容再加在AH中
6.AND,OR,XOR,NOT为四条逻辑运算指令,下面的解释正确的是()
A.指令XOR AX,AX执行后,AX内容不变,但设置了标志位
B.指令OR DX,1000H执行后,将DX最高位置1,其余各位置0
C.指令AND AX,OFH执行后,分离出AL低四位
D.NOT AX,执行后,将AX清0
7.在执行下列指令时,需要使用段寄存器DS的指令是()
A.STOSW B.ADD AL,CL
C.NEG BX D.INC DA[BX]
8.无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是()A.ADD BH,01H B.OR BH,01H
C.XOR BH,01H D.TEST BH,01H
9.完成对CL寄存器的内容乘以4的正确操作是()
A.ROL CL,1 B.MUL 4
C.SHL CL,1 D.MOV CL,2
SHL CL,1 SHL CL,CL
10.下面各传送指令中,正确的是()
A.MOV [DI],[SI] B.MOV[DX+DI],AL
C.MOV WORD PTR [BX],0100H D.MOV AL,BX
11.汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法()A.名字的第一个字符可以是大写英文字母及小写英文字母
B.名字的第一个字符可以是字母、数字及、@、_
C.名字的有效长度≤31个字符
D.在名字中不允许出现$
12.要实现使BETA的值为56,应采用语句为()
A.BETA DB 56 B.BETA DB 56H
C.BETA EQU 56 D.BETA EQU 56H
13.REPZ CMPSW指令,重复执行的终止条件是()
A.CX=0或ZF=0 B.CX=0且ZF=0
C.CX=0或ZF=1 D.CX=0且ZF=1
14.下面程序段执行后,AL中的内容是()
MOV AX,8833H
ADD AL,AH
DAA
A.21 B.21H
C.0C1H D.0DDH
15.比较两个带符号的数A、B,当A=B时程序转移,测试的条件为()
A.ZF=1 B.ZF=0
C.SF=1 D.SF=0
16.检查二个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMP AL,BL”指令后应跟的分支指令是()
A.JNC LOP1 B.JA LOP1
C.JC LOP1 D.JGE LOP1
17.在下列串操作指令中,同时使用源串和目的串地址指针的指令是()
A.STOSW B.LODSW
C.SCASW D.CMPSW
18.设AL=0AH,下列指令执行后能使AL=05H的是()
A.NOT AL B.AND AL,0FH
C.XOR AL,0FH D.OR AL,0FH
19.DA1 DW‘AB’,‘CD’,‘EF’,‘GH’()
MOV AX,DA1+3
指令执行后AX中的内容是
A.‘EF’ B.‘CD’
C.‘BC’ D.‘FC’
20.使用DOS系统功能调用时,使用的软中断指令是()
A.INT 21 B.INT 10H
C.INT 16H D.INT 21H
二、填空题请在每小题的空格中填上正确答案。错填、不填均无分。
1.十六进制数0FFF8H表示的十进制正数为________,表示的十进制负数为________。
2.若DS=0F3EH,SI=2000H,COUNT=0A8H,指令MOV AX,
(SI+COUNT)中,源操作数的有效地址EA为________,其物理地址为________。
3.CPU的标志寄存器中标志位,可以分为两大类,其中一类称为________标志位,另一类称为________标志位。
4.当标志位________=1时表示无符号数运算产生溢出,而当标志位________=1是表示带符号数运算产生溢出。
5.如JMP指令采用段间间接寻址,那么由4个相邻字节单元中存放有转移地址,其中前两个字节存放的是________,而后两个字节存放的是________。
6.在串操作程序中,通常在重复前缀指令REPZ或REPNZ后,选用的串操作指令是________或________才有实际意义。
三、简答题
1.已知:BX=1357H,DI=2000H,DS=2000H,CS=4000H,分别指出下面各指令中存储器操作数的物理地址。(1)MOV AL,[BX]
(2)MOV CS:[BX+DI],AH
2.0P1 DB 1,2
0P2 DW 3412H,5678H
MOV AX,OP1+1;字单元(OP1+1) AX
MOV BL,OP2+1;字节单元(OP2+1) BL
上述二条传送语句有语法错误,请根据注释字段的说明,将其改正。
3.下列语句在存储器中分别为变量分配多少字节?
(1)AD2 DW 10 DUP(?),10
(2)AD3 DD 100 DUP(?)
4.简述下面两条指令分别是什么语法错误?
MOV [BX],[SI]
MOV AX,DL
四、程序分析题
1. MOV DL,AL
NOT DL
TEST DL,04H
JE NEXT
┇
NEXT:…
若上述程序段执行时产生分支,说明AL中的数第几位一定为1?程序段执行后CF是多少?
2.DA1 DB‘ABCDEFGHI’
DA2 DB 9 DUP(0)
┇
LEA SI,DA1
LEA DI,DA2
MOV CX,9
CLD
LOP: LODSB
SUB AL,10H
STOSB
LOOP LOP
. . .
试问:①写出程序执行后DA2各字节中的数据。
②保持程序功能情况下,程序中可否改写为
3.已知:BX=4567H
NEG BX
INC BX
NEG BX
DEC BX
程序段执行后,BX=________,CF=________。
4. MOV BL,64H
MOV CL,03H
XOR AX,AX
AGAIN:ADD AL,BL
ADC AH,0
DEC CL
JNZ AGAIN
问:(1)该程序段完成的功能是:
(2)AX=________。
5.已知数据段中定义
DAT1 DB 12H,34H,56H,78H
MOV CX,0
MOV AX,WORD PTR DAT1
MOV CL,DAT1+3
当程序段执行完后AX=________,CX=________。
6.DA1 DB 83H,72H,61H,94H,5AH
┇
MOV CX,WORD PTR DA1
AND CX,0FH
MOV AL,DA1+3
SHL AL,CL
上述指令序列执行后,AL=_______,CL=_______。
五、程序填空题(本大题共2小题,每小题6分,共12分)
1.在NUMW单元存放有一个0-65535范围内的整数,将该数除以500,商和余数分别存入QU1和REM单元,请在空行处各填上一条指令完善该程序。
MOV AX,NUMW
_____________
XOR DX,DX
DIV BX
MOV QUI,AX
_____________
2.某程序欲用单个字符显示的2号功能调用去显示STRING中的字符串‘COMPUTER’(不显示字符‘$’!).试在空白处填上适当的一条指令。
STRING DB‘COMPUTER’,‘$’
┇
MOV BX,0FFSET STRING
LOP:MOV DL,[BX]
MOV AH,02H
INT 21H
____________________
____________________
JNE LOP
六、编程序题
1.试编制一程序段,用串操作指令实现以DA_BY为首址的20H个字节单元中存放相同字符‘Y’(设DA_BY 存储区已有ES指向)。
2.试编制一源程序,统计DA1字单元中含0的个数,如统计的个数为奇数,则将进位位置1,否则进位位清0。
DATA SEGMENT
DA1 DW XXXX
DATA ENDS
汇编语言程序设计练习题答案
一、
1、C;
2、D;
3、A;
4、B;
5、C;
6、C;
7、D;
8、B;
9、C;10、C;
11、B;12、C;13、A;14、B;15、A
16、C;17、D;18、C;19、D;20、B
二、
1、+65528;-32760
2、20A8H;11488H
3、状态;控制
4、CF;OF
5、IP;CS
6、STOS;CMP
三、
1、(1)21357H;(2)43357H
2、MOV AX,WORD PTR(OP1+1)
MOV BL,BYTE PTR(OP2+1)
3、(1)22;(2)400
4、MOV指令不能在两个存储器操作数之间进行;
操作数类型不匹配
四、
1、第2位;CF=0
2、123456789;不能更改
3、BX=4565H;CF=1
4、AX=012CH,将AX内容乘3送BX中
5、AX=3412H,CX=0078H
6、AL=0A0H,CL=03H
五、
1、MOV BX,500
MOV REM,DX
2、INC BX
CMP [BX],24H
六、
1、LEA DI,DA_BY
MOV CX,32
CLD
REP STOSB
2、CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA SI,DA1
MOV CX,16
XOR BL,BL
AGAIN: MOV AL,[SI]
HL AL,1
JC NEXT
INC BL
NEXT:INC SI
LOOP AGAIN
TEST BL,01H
JNE L1
CLC
JMP DONE
L1: STC
DONE: MOV AH,4CH
INT 21H
CODE ENDS
END START
21.字母“C”的ASCⅡ码是43H,则5AH是________的ASCⅡ码。
A、*
B、a
C、A+6
D、Z
22.在自减型寄存器间址方式中,若寄存器指定为SP,则是_________。
A、自减型寄存器间址
B、堆栈寻址
C、立即寻址
D、变址寻址
23.8086CPU中,用于存放程序运行状态标志的寄存器是_______。
A、PC
B、FR
24.运算器的核心部件是_______________。
A、数据寄存器
B、算术逻辑单元
C、累加器
D、数据总线
25.总线按功能可分为_____________种总线。
A、1
B、2
C、3
D、4
26.存储容量的基本单位是_____________。
A、位数
B、字节数
C、存储单元数
D、字节数或存储单元数×位数27.8086的堆栈初始化时,SP指针指向_________。
A、栈底
B、栈顶
C、栈底+2单元
D、栈底-2单元
28.向显示器输出一个字符使用的DOS调用号是__________。
A、07H
B、02H
C、09H
D、0AH
29.下列____________不是CPU响应中断的条件。
A、CPU内部开中断
B、CPU内部关中断
C、执行完当前指令后
D、未出现更高级的中断请求30.串操作寻址方式中,若DF=0,则SI,DI的变化方式是________.
A、SI自增,DI自减
B、SI自减,DI自增
C、SI,DI均自增
D、SI,DI均自减
D B A B C B A B B C
2.1已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12345678H,[21200H]~[21203H]依次存放2A4C B765H,说明下列每条指令执行完后AX寄存器的内容。 (1)mov ax,1200h (2)mov ax,bx (3)mov ax,[1200h] (4)mov ax,[bx] (5)mov ax,[bx+1100h] (6)mov ax,[bx+si] (7)mov ax,[bx][si+1100h] 〔解答〕 (1)AX=1200H (2)AX=0100H (3)AX=4C2AH;偏移地址=bx=0100h (4)AX=3412H;偏移地址=bx=0100h (5)AX=4C2AH;偏移地址=bx+1100h=1200h (6)AX=7856H;偏移地址=bx+si=0100h+0002h=0102h (7)AX=65B7H;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h 〔习题2.2〕指出下列指令的错误 (1)mov cx,dl (2)mov ip,ax (3)mov es,1234h (4)mov es,ds (5)mov al,300 (6)mov[sp],ax (7)mov ax,bx+di
(8)mov20h,ah 〔解答〕 (1)两操作数类型不匹配 (2)IP指令指针禁止用户访问 (3)立即数不允许传给段寄存器 (4)段寄存器之间不允许传送 (5)两操作数类型不匹配 (6)目的操作数应为[SI] (7)源操作数应为[BX+DI] (8)立即数不能作目的操作数 〔习题2.5〕已知SS=2200H、SP=00B0H,画图说明执行下面指令序列时,堆栈区和SP的内容如何变化?mov ax,8057h push ax mov ax,0f79h push ax pop bx pop[bx] 〔解答〕 mov ax,8057h push ax mov ax,0f79h push ax pop bx;bx=0f79h pop[bx];DS:[0f79h]=8057h
第1章基础知识 检测点1.1(第9页) (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13位。 (2)1KB的存储器有1024个存储单元,存储单元的编号从0到1023。 (3)1KB的存储器可以存储8192(2^13)个bit,1024个Byte。 (4)1GB是1073741824(2^30)个Byte、1MB是1048576(2^20)个Byte、1KB是1024(2^10)个Byte。 (5)8080、8088、80296、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为: 64(KB)、1(MB)、16(MB)、4(GB)。 (6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为: 1(B)、1(B)、2(B)、2(B)、4(B)。 (7)从内存中读取1024字节的数据,8086至少要读512次,80386至少要读256次。 (8)在存储器中,数据和程序以二进制形式存放。
(1)1KB=1024B,8KB=1024B*8=2^N,N=13。 (2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。 (3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。 (4)1GB=1073741824B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。(5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU 最多可以寻找2的N次方个内存单元。(一个内存单元=1Byte)。 (6)8根数据总线一次可以传送8位二进制数据(即一个字节)。 (7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。 (8)在存储器中指令和数据没有任何区别,都是二进制信息。
第1章基础知识 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13。 (2)1KB的存储器有1024个存储单元。存储单元的编号从0到1023。 (3)1KB的存储器可以存储1024*8个bit,1024个Byte。 (4)1GB、1MB、1KB分别是2^30、2^20、2^10 Byte。(n^m的意思是n的m次幂) (5)8080、8088、80286、80386的地址总线宽度分别是16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。 (6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。 (7)从内存中读取1024字节的数据,8086至少要读512次、80386至少要读256次。 (8)在存储器中,数据和程序以二进制形式存放。 第2章寄存器答案 检测点2.1 (1) 写出每条汇编指令执行后相关寄存器中的值。 mov ax,62627 AX=F4A3H mov ah,31H AX=31A3H mov al,23H AX=3123H add ax,ax AX=6246H mov bx,826CH BX=826CH mov cx,ax CX=6246H mov ax,bx AX=826CH add ax,bx AX=04D8H mov al,bh AX=0482H mov ah,bl AX=6C82H add ah,ah AX=D882H add al,6 AX=D888H add al,al AX=D810H mov ax,cx AX=6246H (2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方。 解: mov ax,2 add ax,ax add ax,ax add ax,ax 检测点2.2 (1) 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH。 (2) 有一数据存放在内存 20000H 单元中,先给定段地址为SA,若想用偏移地址寻到此单元。
汇编语言程序设计(第二版) 钱晓捷习题答案 第二章(01) 2.1 (1)AX=1200h (2)AX=0100h (3)AX=4C2Ah (4)AX=3412h (5)AX=4C2Ah (6)AX=7856h (7)AX=65B7h 2.2(1) 两操作数类型不匹配 (2) IP指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配 (6) 目的操作数应为[ BP ] (7) 源操作数应为[BX+DI] (8) 立即数不能作目的操作数 2.3 lea bx,table ;获取table的首地址,BX=200H mov al,8 ;传送欲转换的数字,AL=8 xlat ;转换为格雷码,AL=12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。 2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop [bx] ;DS:[0f79h]=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7 W=X+Y+24-Z
2.8 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WORD PTR [0520H],3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax <-- dx,ax =A*B mov ax,Z ;ax = C cwd ;dx,ax =C (扩展符号后为双字) add cx,ax adc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx<-- A*B+C-540 mov ax, V ;ax= D cwd ;dx,ax= D (扩展符号后为双字) sub ax, cx sbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数 2.10;(1)xchg的操作数不能是立即数 (2不能对CS直接赋值 (3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址 (8)out只能以AL/AX为源操作数 第二章(02) 2.11; 指令AX的值CF OF SF ZF PF Mov ax,1407h1470h----- And ax,ax1470h00000 Or ax,ax1470h00000 Xor ax,ax000011 Not ax0ffffh----- Test ax,0f0f0h0ffffh00101 注意: 1. mov, not指令不影响标志位 2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。
解: mov ah,1 ;只允许输入小写字母 int 21h sub al,20h ;转换为大写字母 mov dl,al mov ah,2 int 21h ;显示 解: mov ax, bufX cmp ax, bufY jge done mov ax, bufY done: mov bufZ, ax 解:
.model small .stack .data bufX dw -7 signX db .code .startup cmp bufX,0 ;test bufX,80h jl next ;jnz next mov signX,0 jmp done next: mov signX,-1 done: .exit 0 end 解: mov dl,’2’ mov ax,bufX cmp ax,bufY je next1 dec dl next1: cmp ax,bufZ je next2 dec dl next2: mov ah,2 int 21h
编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10个字节数据之和,并将结果存入字节变量SUM中(不考虑溢出和进位)。 ; .model small .stack .data b_data db 12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34h ;原始数据num equ 10 ;数据个数 sum db ;预留结果单元 .code .startup xor si, si ;位移量清零 xor al, al ;取第一个数 mov cx, num ;累加次数 again: add al, b_data[si] ;累加 inc si ;指向下一个数 loop again ;如未完,继续累加 mov sum, al ;完了,存结果 .exit 0 end 解: lucase proc push bx mov bx,offset string cmp al,0 je case0 cmp al,1
习题一 1 无符号数: 11010011=211=D3H,01110111=119=77H, 10000011=131=83H, 00101111=47=2FH, 10101010=170=AAH 带符号数:11010011= -45=D3H,01110111=+119=77H,10000011= -125=83H, 00101111=+47=2FH,10101010= -86=AAH 2 5E8AH,0BE6H,3DEH,4940H 3 00011101+00110101=01010010=5 2H=82 01001001+11101000=00110001=3 1H=49 10111110+01010010=00010000=1 0H=16 10011010+11110001=10001011=8 BH= -117 4 00101001+01010011=01111100+0 0000110=10000010=82H=82 01110011-00100100=01001111-00000110=01001001=49H=49 01100110+00011000=01111110+0 0000110=10000100=84H=84 0000000100110010+01110101=00 00000110100111+00000110 =0000001000000111=0207H=207 5 000020A3H,FF94H,00003456H,007FH,FFFFEC00H 6 无符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH 7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII码,十进制数38的压缩BCD码 (2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255 (3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码 (4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码 8 (1) 108=01101100B=6CH,补码01101100B,压缩BCD码0000000100001000,ASCII码313038H (2) 46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H (3) –15=11110001B=F1H,补码11110001B,ASCII码2D3135H (4) 254=0000000011111110B=00FEH,补码0000000011111110B,压缩BCD 码0000001001010100,ASCII码323534H 9 (1) 56+63=01110111B,CF=0,SF=0,ZF=0,OF=0 (2) 83-45=00100110B,CF=0,SF=0,ZF=0,OF=0 (3) -74+29=11010011B,CF=0, SF=1,ZF=0,OF=0 (4) -92-37=01111111B,CF=1, SF=0,ZF=0,OF=1 10 回车、换行、响铃、ESC键、空格键、@、P、p 习题二 9 最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节) 10 CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP 11 字节单元保存8位数,字单元保存16位数。根据源操作数的属性确定要访问的是字节单元还是字单元。 12 对于字节单元来说,偶地址和奇地址一样;对于字单元而言,最好用偶地址保存,可减少CPU的访存次数。 13 首单元的物理地址=38AE8H,末单元的物理地址 =38AE8H+7FFFH=40AE7H
第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB
汇编语言课后习题答案郑 晓薇后的 Modified by JEEP on December 26th, 2020.
习题一1 2 5E8AH,0BE6H,3DEH,4940H 3 00011101+00110101=0101001 0=52H=82 4 5000020A3H,FF94H,00003456H,007FH, FFFFEC00H 6无符号数:0~65535,0000H~FFFFH;带符号数:-32768~ +32767,8000H~7FFFH 7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII 码,十进制数38的压缩BCD码(2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255(3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码(4) 0DH等于十进制数13,是十进制数13的补码,回车符的ASCII码8 (2) 46=00101110B=2EH,补码00101110B,压缩BCD码01000110,ASCII码3436H 9 (1) 56+63=01110111B, CF=0,SF=0,ZF=0,OF=0(2) 83-45=00100110B,CF=0, SF=0,ZF=0,OF=0(4) -92-37=01111111B,CF=1,SF=0,ZF=0,OF=1 10 回车、换行、响铃、ESC键、空格键、@、P、p 习题二 9 最少划分为16个逻辑段,最多划分为65536个逻辑段(每段16个字节) 10CS:IP,DS:BX、SI、DI,ES:BX、SI、DI,SS:SP、BP 11 字节单元保存8位数,字单元保存16位数。根据源操作数的属性确定要访问的是字节单元还是字单元。
第一章. 习题 1.1用降幂法和除法将下列十进制数转换为二进制数和十六进制数: (1) 369 (2) 10000 (3) 4095 (4) 32767 答:(1) 369=1 0111 0001B=171H (2) 10000=10 0111 0001 0000B=2710H (3) 4095=1111 1111 1111B=FFFH (4) 32767=111 1111 1111 1111B=7FFFH 1.2将下列二进制数转换为十六进制数和十进制数: (1) 10 1101 (2) 1000 0000 (3) 1111 1111 1111 1111 (4) 1111 1111 答:(1) 10 1101B=2DH=45 (2) 1000 0000B=80H=128 (3) 1111 1111 1111 1111B=FFFFH=65535 (4) 1111 1111B=FFH=255 1.3将下列十六进制数转换为二进制数和十进制数: (1) FA (2) 5B (3) FFFE (4) 1234 答:(1) FAH=1111 1010B=250 (2) 5BH=101 1011B=91 (3) FFFEH=1111 1111 1111 1110B=65534 (4) 1234H=1 0010 0011 0100B=4660 1.4完成下列十六进制数的运算,并转换为十进制数进行校核: (1) 3A+B7 (2) 1234+AF (3) ABCD-FE (4) 7AB×6F 答:(1) 3A+B7H=F1H=241 (2) 1234+AFH=12E3H=4835 (3) ABCD-FEH=AACFH=43727 (4) 7AB×6FH=35325H=217893 1.5下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其 运算结果。 (1) (-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76) 答:(1) (-85)+76=1010 1011B+0100 1100B=1111 0111B=0F7H;CF=0;OF=0 (2) 85+(-76)=0101 0101B+1011 0100B=0000 1001B=09H;CF=1;OF=0 (3) 85-76=0101 0101B-0100 1100B=0101 0101B+1011 0100B=0000 1001B=09H;CF=0; OF=0 (4) 85-(-76)=0101 0101B-1011 0100B=0101 0101B+0100 1100B=10100001B=0A1H; CF=0;OF=1 (5) (-85)-76=1010 1011B-0100 1100B=1010 1011B+1011 0100B=0101 1111B=5FH; CF=0;OF=1 (6) -85-(-76)=1010 1011B-1011 0100B=1010 1011B+0100 1100B=11110111B=0F7H; CF=0;OF=0 1.6下列各数为十六进制表示的8位二进制数,请说明当它们分别被看作是用补码表示的 带符号数或无符号数时,它们所表示的十进制数是什么?
补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。 assume cs:code code segment start: mov ax,2000h mov ds,ax mov bx,0 s: mov ch,0 mov cl,[bx] jcxz ok ;当cx=0时,CS:IP指向OK inc bx jmp short s ok: mov dx,bx mov ax ,4c00h int 21h code ends end start 检测点9.3 补全编程,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。 assume cs:code code segment start: mov ax,2000h mov ds,ax mov bx,0 s:mov cl,[bx] mov ch,0 inc cx inc bx loop s ok:dec bx mov dx,bx mov ax,4c00h int 21h code ends end start 书P101,执行loop s时,首先要将(cx)减1。 “loop 标号”相当于 dec cx if((cx)≠0) jmp short 标号 检测点10.1 补全程序,实现从内存1000:0000处开始执行指令。 assume cs:code stack segment db 16 dup (0) stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 mov ax, 1000h
教材:《汇编语言》 检测点1.1 (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13位。 (2)1KB的存储器有 1024 个存储单元,存储单元的编号从 0 到 1023 。 (3)1KB的存储器可以存储 8192(2^13)个bit, 1024个Byte。 (4)1GB是 1073741824 (2^30)个Byte、1MB是 1048576(2^20)个Byte、1KB是 1024(2^10)个Byte。 (5)8080、8088、80296、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为: 64 (KB)、 1 (MB)、 16 (MB)、 4 (GB)。 (6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为: 1 (B)、 1 (B)、 2 (B)、 2 (B)、 4 (B)。 (7)从内存中读取1024字节的数据,8086至少要读 512 次,80386至少要读 256 次。 (8)在存储器中,数据和程序以二进制形式存放。 解题过程: (1)1KB=1024B,8KB=1024B*8=2^N,N=13。 (2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。 (3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。 (4)1GB=1073741824B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。 (5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N 次方个内存单元。(一个内存单元=1Byte)。 (6)8根数据总线一次可以传送8位二进制数据(即一个字节)。 (7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。(8)在存储器中指令和数据没有任何区别,都是二进制信息。 检测点 2.1 (1) 写出每条汇编指令执行后相关寄存器中的值。 mov ax,62627 AX=F4A3H mov ah,31H AX=31A3H mov al,23H AX=3123H add ax,ax AX=6246H mov bx,826CH BX=826CH mov cx,ax CX=6246H mov ax,bx AX=826CH add ax,bx AX=04D8H mov al,bh AX=0482H mov ah,bl AX=6C82H add ah,ah AX=D882H add al,6 AX=D888H add al,al AX=D810H mov ax,cx AX=6246H Microsoft(R) Windows DOS
第1章基础知识 检测点(第9页) (1)1个CPU的寻址能力为8KB,那么它的地址总线的宽度为13位。 (2)1KB的存储器有1024个存储单元,存储单元的编号从0到1023。 (3)1KB的存储器可以存储8192(2^13)个bit,1024个Byte。 ~ (4)1GB是24(2^30)个Byte、1MB是1048576(2^20)个Byte、1KB是1024(2^10)个Byte。 (5)8080、8088、80296、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为: 64(KB)、1(MB)、16(MB)、4(GB)。 (6)8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为: 1(B)、1(B)、2(B)、2(B)、4(B)。 (7)从内存中读取1024字节的数据,8086至少要读512次,80386至少要读256次。 (8)在存储器中,数据和程序以二进制形式存放。 解题过程: ' (1)1KB=1024B,8KB=1024B*8=2^N,N=13。 (2)存储器的容量是以字节为最小单位来计算的,1KB=1024B。 (3)8Bit=1Byte,1024Byte=1KB(1KB=1024B=1024B*8Bit)。 (4)1GB=24B(即2^30)1MB=1048576B(即2^20)1KB=1024B(即2^10)。 (5)一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。(一个内存单元=1Byte)。 (6)8根数据总线一次可以传送8位二进制数据(即一个字节)。 (7)8086的数据总线宽度为16根(即一次传送的数据为2B)1024B/2B=512,同理1024B/4B=256。 (8)在存储器中指令和数据没有任何区别,都是二进制信息。
习题一 1分别将下列二进制数作为无符号数和带符号数转换为十进制和十六进制数 ,01110111,,00101111 , 查看正确答案 无符号数: =211=D3H,01110111=119=77H,=131=83H, 00101111=47=2FH,=170=AAH 带符号数:= -45=D3H,01110111=+119=77H,= -125=83H, 00101111=+47=2FH,= -86=AAH 2十六进制运算 1A52H+4438H ,3967H-2D81H,37H×12H ,1250H×4H 查看正确答案 5E8AH,0BE6H,3DEH,4940H 3将十进制数变为8位补码,做运算(结果用二进制、十六进制、十进制表示) 29+53,73-24,-66+82 ,-102-15 查看正确答案 00011101+00110101=01010010=52H=82 01001001+=00110001=31H=49 +01010010=00010000=10H=16 +==8BH= -117 4用压缩BCD码计算(结果用二进制、BCD码、十进制表示) 29+53,73-24,66+18 ,132+75 查看正确答案 00101001+01010011=01111100+00000110==82H=82 01110011-00100100=01001111-00000110=01001001=49H=49 01100110+00011000=01111110+00000110==84H=84 00000000+01110101=00000001+00000110 =00000011=0207H=207 5符号位扩展(字节扩展为字,字扩展为双字) 20A3H,94H ,3456H ,7FH ,EC00H 查看正确答案 000020A3H,FF94H,00003456H,007FH,FFFFEC00H 6若机器字长为16位,其无符号数表示范围是多少带符号数表示范围是多少分别用十进制和十六进制表示。查看正确答案 无符号数:0~65535,0000H~FFFFH;带符号数:-32768~+32767,8000H~7FFFH 7写出下列十六进制数所能代表的数值或编码: (1)38H (2)FFH (3)5AH (4)0DH 查看正确答案
汇编语言课后习题答案---郑晓薇(整理后 的)
习题一 1 无符号数: 11010011=211=D3H,01110111=119=77H,10000011=131=83H,00101111=47=2FH,10101010=170=AAH 带符号数:11010011= - 45=D3H, 01110111=+119=77H,10000011= -125=83H,00101111=+47=2FH,10101010= -86=AAH 2 5E8AH,0BE6H,3DEH,4940H 3 00011101+00110101=0101001 0=52H=82 01001001+11101000=0011000 1=31H=49 10111110+01010010=0001000 0=10H=16 10011010+11110001=1000101 1=8BH= -117 4 00101001+01010011=0111110 0+00000110=10000010=82H= 82 01110011- 00100100=01001111-00000110=01001001=49H=49 01100110+00011000=0111111 0+00000110=10000100=84H= 84 0000000100110010+01110101 =0000000110100111+0000011 0 =0000001000000111=0207H= 207 5 000020A3H,FF94H,00003456H,007FH,FFFFEC00H 6 无符号数:0~65535, 0000H~FFFFH;带符号数:-32768~+32767,8000H~ 7FFFH 7 (1) 38H等于十进制数56,是十进制数56的补码,数字8的ASCII 码,十进制数38的压缩BCD码(2) FFH等于十进制数-1,是带符号数-1的补码,无符号数为255 (3) 5AH等于十进制数90,是十进制数90的补码,大写字母Z的ASCII码
汇编语言程序设计第四版 【课后习题答案】--囮裑為檤 第2章8086的指令系统 〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。 (1)mov ax,1200h (2)mov ax,bx (3)mov ax,[1200h] (4)mov ax,[bx] (5)mov ax,[bx+1100h] (6)mov ax,[bx+si] (7)mov ax,[bx][si+1100h] 〔解答〕 (1)AX=1200H (2)AX=0100H (3)AX=4C2AH ;偏移地址=bx=0100h (4)AX=3412H ;偏移地址=bx=0100h (5)AX=4C2AH ;偏移地址=bx+1100h=1200h (6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h (7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h 〔习题2.2〕指出下列指令的错误 (1)mov cx,dl (2)mov ip,ax (3)mov es,1234h (4)mov es,ds (5)mov al,300 (6)mov [sp],ax (7)mov ax,bx+di
(8)mov 20h,ah 〔解答〕 (1)两操作数类型不匹配 (2)IP指令指针禁止用户访问 (3)立即数不允许传给段寄存器 (4)段寄存器之间不允许传送 (5)两操作数类型不匹配 (6)目的操作数应为[ SI ] (7)源操作数应为[BX+DI] (8)立即数不能作目的操作数 〔习题2.3〕已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。 lea bx,table mov al,8 xlat 〔解答〕 lea bx,table ;获取table的首地址,BX=200H mov al,8 ;传送欲转换的数字,AL=8 xlat ;转换为格雷码,AL=12H P35 〔习题2.4〕什么是堆栈,它的工作原则是什么,它的基本操作有哪两个,对应哪两种指令? 〔解答〕 堆栈是一种按“先进后出”原则存取数据的存储区域,位于堆栈段中,使用SS段寄存器记录其段地址;它的工作原则是先进后出;堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。 〔习题2.5〕已知SS = 2200H、SP = 00B0H,画图说明执行下面指令序列时,堆栈区和SP的内容如何变化? mov ax,8057h push ax mov ax,0f79h push ax
选择 1、用户为了解决自己的问题,用汇编语言所编写的程序,称为___________。 A 、目标程序B、源程序C、可执行程序D、汇编程序 2、无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是___________。 A、ADD BH,01H B、OR BH,01H C、XOR BH,01H D、TEST BH,01H 3、设AL=20H,SI=0500H,DS=3000H,(30500H)=0C0H,CF=1,执行SBB AL,[SI]后,正确的结果是___________。 A、AL=5FH SF=1 CF=1 B、AL=60H SF=1 CF=0 C、AL=5FH SF=0 CF=1 D、AL=60H SF=0 CF=0 4、设AX=1000H NEG AX NOT AX 执行上述指令后,正确的结果是___________。 A、AX=1001H B、AX=0FFFH C、AX=1000H D、AX=0111H 5、CBW指令的功能是___________。 A、把源操作数的符号位扩展到目的操作数中 B、把AL中的符号位扩展到AH中 C、把AH中的符号位扩展到AL中 D、把AX中的符号位扩展到DX中 6、AND,OR,XOR,NOT为四条逻辑运算指令,下面的解释正确的是 A、指令XOR AX,AX执行后,AX内容不变,但设置了标志位 B、指令OR DX,1000H执行后,将DX最高位置1,其余各位置0 C、指令AND AX,OFH执行后,分离出AL低四位 D、NOT AX,执行后,将AX清0 7、执行下列指令序列后,正确的结果是___________。 MOV AL,81H ADD AL,AL ADC AL,AL A、AL=05H B、AL=204H C、AL=04H D、AL=205H 4、TEST DL,55H JE NEXT …. NEXT:…… 上述程序段,执行JE指令时能产生转移的情况是。 A、DL>55H B、DL<55H C、DL=55H D、DL中第0、2、4、6位均为0 5、设CL=05H,要获得CL=0AH,可选用的指令是。 A、XOR CL,0FH B、NOT CL C、OR CL,0AH D、AND CL,0FH 填空
add ah,ah AX=D882H add al,6 AX=D888H add al,al AX=D810H mov ax,cx AX=6246H Microsoft(R) Windows DOS (C)Copyright Microsoft Corp 1990-2001. C:\DOCUME~1\ADMINI~1>debug -a 0C1C:0100 mov ax,f4a3 0C1C:0103 mov ah,31 0C1C:0105 mov al,23 0C1C:0107 add ax,ax 0C1C:0109 mov bx,826c 0C1C:010C mov cx,ax 0C1C:010E mov ax,bx 0C1C:0110 add ax,bx 0C1C:0112 mov al,bh 0C1C:0114 mov ah,bl 0C1C:0116 add ah,ah 0C1C:0118 add al,6 0C1C:011A add al,al 0C1C:011C mov ax,cx 0C1C:011E -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0100 NV UP EI PL NZ NA PO NC 0C1C:0100 B8A3F4 MOV AX,F4A3 -t AX=F4A3 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0103 NV UP EI PL NZ NA PO NC 0C1C:0103 B431 MOV AH,31 -t AX=31A3 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0C1C ES=0C1C SS=0C1C CS=0C1C IP=0105 NV UP EI PL NZ NA PO NC
汇编语言复习题 简答题 1.存储器地址为什么要分段?物理地址是如何形成的? 2.IBM PC机的寻址方式(与数据有关的寻址方式)有几种?各举一例说明。 3.80x86微机的存储器中存放信息如下图所示。试读出30022H与30024H字节单元的内容与30021H和30022H字单元的内容。 4.现有(DS)= 2000H,(BX)=0100H,(SI)= 0002H, (20100)= 12H, (20101)=34H, (20102)= 56H, (20103)=78H, (21200)=2AH, (21201)= 4CH, (21202)=B7H, (21203) = 65H,试说明下列各条指令执行完后AX的内容。 1)MOV AX,1200H
2)MOV AX,BX 3)MOV AX,[1200H] 4)MOV AX,[BX] 5)MOV AX,1100[BX] 5.完成下列各式补码数的运算,并根据结果设置标志位SF,CF,ZF,OF,指出运算结果是否有效 1)01001001b+10011101b 2)01000001b-10101011b 6.有符号定义语句如下: BUFF DB 1,2,3,’123’ EBUFF DB 0 L EQU EBUFF-BUFF 问L的值为多少?为什么? 答案: 1、IBM PC系列机的字长为16位,能够访问的最大存储空间64KB,而在IBM PC内存为1MB的情况下,访问这1MB的存储空间需要20位。为了解决字长为16位的机器访问1MB的存储空间,将1MB空间每16B
分为一段,共64K段,以16位段地址:16位偏移地址的形式组成,物理地址通过如下方式计算: 物理地址=段地址×10h + 偏移地址 2.IBM PC机的寻址方式有7种: 1)立即寻址:MOV AX, 1234H; 2)寄存器寻址:MOV AX, BX; 3)直接寻址:MOV AX, [1234H]; 4)寄存器间接寻址:MOV AX, [BX]; 5)寄存器相对寻址:MOV AX, 20H[BX]; 6)基址变址寻址:MOV AX, [BX][SI]; 7)相对基址变址寻址:MOV AX, 100H[BX][SI]; 3.解:(30022H)= 12H (30024H) = 56H (30021H) = 12CDH (30022H) = 3412H 4.解: (1)MOV AX,1200H 解:(AX)=1200H (2)M OV AX,BX 解:(AX)= 0100H