`00第一章课外练习题
一、单项选择题:
1.从键盘输入的字符,在计算机内存储的是它的( A )
(A)二进制编码 (B)四进制编码 (C)八进制编码(D)十六进制编码
2.6位无符号二进制数能表示的最大十进制数是( B )。
(A) 64 (B) 63 (C) 32 (D) 31
3.十进制数269变换为十六进制数是( C )。
(A)10B (B)10C (C)10D (D)10E
4.8位的微型计算机系统是以16位来表示地址,则该微机系统有( C )个地址空间。
(A)255 (B)65535 (C)65536 (D)1048576
5.8位有符号二进制数能表示的最大十进制数是( D )。
(A)256 (B)255 (C)128 (D)127
6.十六进制数88H,可表示成下面几种形式,请找出错误的表示( D )。
(A)无符号十进制数136 (B)带符号十进制数-120
(C)压缩型BCD十进制数88 (D)8位二进制数-8的补码表示
7.有一个数值152,它与十六进制数6A相等,那么该数值是( B )。
(A)二进制数 (B)八进制数 (C)十进制数 (D)四进制数
8.7位ASCII总共可表示( C )个符号。
(A)256 (B)127 (C)128 (D)255
9.4B的字长是( C )。
(A)8位 (B)16位 (C)32位 (D)64位
二、判断题(判断每题正误,对的在题后括号内划 “√”,错的划“×”)
1.字节通常用英文单词“Bit”来表示 (×)。
2.目前广泛使用的Pentium计算机其字长为5个字节 (×)。
3.存储器中将8个相邻的二进制位作为一个单位,这种单位称为字节 (√)。
4.微型计算机的字长并不一定是字节的整数倍 (×)。
三、填空题
1.8位有/无符号整数的表示范围写成16进制形式为(80~~7F) /( 00~~FF)。
2.己知:计算机中有一个“01100001”编码,如果把它看作是无符号数,它是十进制什么数(97);如果认为它是BCD,则表示(01100001)BCD;认为它是某个ASCII,则代表( a )字符。
3.若[X]补=X,则X为 ( 非负数)。
4.(00101011)B+(13)D+(1B)H=(123)Q
5.已知:A=10001011,B=11011010,求A∧B=(10001010);A∨B=(11011011)。
6.已知:X=+0010011B,Y= -0111100B,试用补码完成真值(X+Y)=( 11010111);(X - Y)=(01001111)。
7.十进制数的(731)=([1**********]1)BCD。
8.([1**********]1)BCD=(731)十进制数。
9.将一个0~9之间的数据转换为ASCII需加(30H)。
10.大写英文字母转换为小写英文字母需加(20H)。
11.英文字母“A”~“F”转换为十六进制数值A~F需要减(37H)。
四、简答题
1.什么是汇编语言?为什么要学习汇编语言?
答:汇编语言是机器语言的符号表示形式。它不仅是计算机原理、操作系统等课程的必要先修课,而且对于训练学生掌握计算机工作原理、程序设计技术、熟练上机操作和程序调试技术都有重要作用。
3.把下列二进制数转换成十进制数。
① 1101.01=13.25 ② 111001.00011=57.9375
③ 111.001=7.125 ④ 1010.1=10.5
5.把下列十六进制数转换成十进制数。
① A6.DC=166. ② 9AC.BD=2476.
③ B4A.8D=2890. ④ 1AC.0A=428.
6.把下列英文单词转换成ASCII编码的字符串。
① Water=5761746572 ② Great=4772656174
③ Good=476F6F64 ④ After=4166746572
7.回车键、空格键的ASCII代码及其功能是什么?答:0DH、20H。字符从头开始、空一个字符的位置。
第二章课外练习题
一、单项选择题:
1.下列四个寄存器中,哪个寄存器在程序设计中是不可省略的( A )。
(A)CS (B)DS (C)ES (D)SS
2.指令MOV AX, 10[SI]的源操作数字段的寻址方式是( C )。
(A)寄存器寻址 (B)寄存器间址 (C)变址寻址 (D)基址寻址
3.8086∕8088 CPU中可用作寄存器间址的寄存器是( B )。
(A)BX、SI、DI (B)BX、BP、SI、DI
(C)BX、IP、SI、DI (D)BX,DX,SI,DI
4.指令MOV 100[SI][BP],AX 目标操作数的隐含段为( B )。
(A)数据段 (B)堆栈段 (C)代码段 (D)附加段
第二章课外练习题
一、单项选择题:
1.下列四个寄存器中,哪个寄存器在程序设计中是不可省略的( A )。
(A)CS (B)DS (C)ES (D)SS
2.指令MOV AX, 10[SI]的源操作数字段的寻址方式是( C )。
(A)寄存器寻址 (B)寄存器间址 (C)变址寻址 (D)基址寻址
3.8086∕8088 CPU中可用作寄存器间址的寄存器是( B )。
(A)BX、SI、DI (B)BX、BP、SI、DI
(C)BX、IP、SI、DI (D)BX,DX,SI,DI
4.指令MOV 100[SI][BP],AX 目标操作数的隐含段为( B )。
(A)数据段 (B)堆栈段 (C)代码段 (D)附加段
二、判断题(判断每题正误,对的在题后括号内划 “√”,错的划“×”)
1. 当SP, BP, SI,DI用于指针和变址寄存器使用时;
① SP中所含的偏移地址是堆栈段中的偏移地址。 ( √ )
② BP、SI、DI所含的偏移地址是数据段中的偏移地址。 ( × )
2. 奇偶标志位PF,当运算结果的低8位中有偶数个1时,被置为0。 ( × )
3. 零标志位ZF,当运算结果为0时,被置为0。 ( × )
4. 符号标志位SF,在运算结果为负时被置为1。 ( √ )
三、填空题
1.在8086/8088CPU中,有许多寄存器,他们是通用寄存器:( AX )( BX )( CX )( DX );指针和变址寄存器:( SP )( BP )( SI )( DI );段寄存器:( CS )( DS )( SS )( ES );指令指针:( IP )还有一个标志寄存器:( PSW ),他们都是( 16 )位的。
2.IBM PC机内存容量最大为( 1M )B,要寻找这样大的空间,需要( 20 )根地址线。
3.每个逻辑段的最大长度为( 64KB )。
4.在IBM PC机中,有4个专门存放段地址的寄存器,称为段寄存器,请写出以下段寄存器的符号:
代码段寄存器:( CS ) 数据段寄存器:( DS )
堆栈段寄存器:( SS ) 附加段寄存器:( ES )
四、简答题
1.IBM PC 的存储器为什么采用分段结构?
答:是因为要寻找20位存储器地址的需要。使用两个十六进制的寄存器做一个寻找20位寄存器工作的一种方法。
2.什么是逻辑地址?什么是物理地址?如何由逻辑地址计算物理地址?
答:逻辑地址是由两部分组成的,即段的基地址和偏移地址。程序员在编写程序时使用的都是逻辑地址。物理地址就是内存单元中的一个惟一的20位二进制数表示的地址,物理地址的范围是从00000H到FFFFFH。CPU与存储器进行数据交换时所使用的地址就是物理地址。
物理地址=段地址×16D+偏移地址。
3.如果在一个程序段开始执行之前,CS=0A7F0H,IP=2B40H,试问该程序段的第一个字的物理地址是多少?答:物理地址=段地址×16D+偏移地址=0A7F0H×16D+2B40H=0AAA00H
4.一个有16个字的数据区,它的起始地址为70A0:DDF6,那么该数据区的最后一个字单元地址是多少?
答:=DDF6H+20H-2H(16个字=32个字节=20H个字节)=DE14即70A0::DE14
5.哪些寄存器可以用来指示存储器地址?答:BX、BP、SI和DI。
6.有一个由20个字组成的存储区,其起始处段地址为4701H,偏移地址为2012H。试写出该存储区首单元和末单元的物理地址。答:该存储区末单元的偏移地址=2012H+28H-2(20个字=40个字节=28H个字节)=2038H。即首单元和末单元的物理地址为49022H和49048H。
7.8086微处理器由哪几部分组成?各部分的功能是什么?
答:8086/8088微处理器由两大部分组成:总线接口单元 BIU和执行单元 EU。
①BIU:负责与存储器接口,即CPU与存储器之间的信息传送。即:
BIU从内存的指定部分取出指令,送至指令队列排队。
从内存的指定部分取出执行指令时所需的操作数,送至EU部分。
②EU:负责指令的执行。
8.简述8086 CPU的寄存器组织。
答:8086/8088CPU的寄存器是由①通用寄存器②控制寄存器③段寄存器组成。
9.试述8086 CPU标志寄存器各位的含义与作用。
答:它含有9个有用的标志位(其余7位不用),用于记录指令操作后的结果状态信息或控制处理器操作的标志。其含义与作用如下:
进位标志C(Carry Flag)——当加减运算操作后,结果的最高位产生一个进位或借位,则C=1,否则C=0。各种移位指令,逻辑操作指令等也可影响CF的状态。CF位也可表示无符号数的溢出。
溢出标志O(Overflow Flag)——在算术运算中,带符号数的运算结果超出机器所能表示的数据范围称为溢出,当溢出发生时,则O=1,否则O=0。
带符号数的数据范围。8位运算时为:﹣128 ~ +127;16位:﹣32768 ~ +32767。
符号标志S(Sign Flag)——若运算结果的最高位(D15或D7)为1,则S=1,否则 S=0。 零标志Z(Zero Flag)——若运算的结果为0,则Z=1,否则Z=0。
奇偶标志P(Parity Flag)—— 若运算结果中‘1’的个数为偶数,则P=1,否则P=0。
辅助进位标志A(Auxitiary Carry Flag)——记录运算时第3位(半个字节)产生的进位值,若第3位产生进位,则A=1,否则A=0。在执行BCD调整时使用此标志。
方向标志DF(Direction Flag)——用于在串处理指令中控制处理信息的方向。当DF=1时,每次操作后使变址寄存器SI和DI减小,这样就使得串处理操作从高地址向低地址方向处理。当DF=0时,则使SI和DI增大,使得串处理从低地址向高地址方向处理。
中断标志IF(Interrupt Flag)——当IF=1时,允许CPU响应可屏蔽中断请求,否则关闭中断。 陷阱标志TF(Trap Flag) ——又称单步跟踪。用于调试时的单步方式操作。当TF=1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF=0时,CPU正常工作,不产生陷阱。
10.指出下列MOV指令的源操作数的寻址方式。
MOV AX,1234H =立即
MOV AX,BX =寄存器
MOV AX,[BX] =寄存器间接
MOV AX,TABLE ;TABLE是一个变量名 =直接
MOV AX,[1234H] =直接
MOV AX,[BX+1234H] =基址
MOV AX,[BP][SI] =基址变址
MOV AX,[BX+SI-1234H] =基址变址
11.设(DS)=2000H,(BX)=0100H,(SS)=1000H,(BP)=0010H,TABLE的物理地址为2000AH,(SI)=0002H。求下列每条指令源操作数的存储单元地址。
=21234H MOV AX,[1234H]
=20100H MOV AX,[BX]
MOV AX,TABLE[BX] =2010AH
=10010H MOV AX,[BP]
=10012H MOV AX,[BP][SI]
12.已知:BX=1234H,BP=5678H,SI=1357H,DS=0925H,SS=0468H,CS=4B10H,指出下述
13.有两个16位字1EE5H和2A3CH分别存放在80x86微机存储器的000B0H和000B3H单元中。请用图表示出它们在存储器里的存放情况。
地址 000B0H 000B1H 000B2H 000B3H 000B4H 14.有关寄存器及存储单元的内容如下:
DS=2000H,BX=0100H,SI=0002H,存储单元的内容见习题14示意图。试说
明下列各条指令执行后AX寄存器的内容。
=1200H ①MOV AX,1200H
=0100H ②MOV AX,BX
=4C2AH ③MOV AX,[1200H]
=3412H ④MOV AX,[BX]
=4C2AH ⑤MOV AX,1100[BX]
=7856H ⑥MOV AX,[BX][SI]
=65B7H ⑦MOV AX,1100[BX][SI]
习题14示意图
第三章课外练习题
一、单项选择题:
1.以下语句汇编后,CENTH的值是( A )。
BUF1 DW 8,19
BUF2 DB 6,'ABC$',10 DUP('5')
CENTH EQU BUF2—BUF1
(A)4 (B)8 (C)14 (D)17
2.在DEBUG环境下查看机器指令使用( B )命令;显示内存数据使用( E )命令。
(A)G (B)U (C)T (D)A (E)D (F)E (G)R
二、填空题:
1.写出下列各语句在存储器中分别为变量分配多少字节,并填入括号内。
DATA SEGMENT
NUM1 DW 20 ( 2 )
NUM2 DB ‘31H,32H,33H’ ( 11 )
NUM3 EQU 10H ( 0 )
NUM4 DB NUM3 DUP(0) ( 10H )
DATA ENDS
2.某程序的数据段定义如下:
DATASG SEGMENT
PARTLIST DB‘PART#’
DB 60
DB ‘PRICE’
DB 0125
DB ‘DESCRIPTION’
DB ‘RADIO’
LISTLENG EQU ($-PARTLIST) ;数组长度,用表达式表示
DATASG ENDS
3.有符号定义语句如下:
BUFF DB 1,2,3,‘123’
EBUFF DB 0
L EQU EBUFF - BUFF
问L的值是( 6 )。
4.下边是汇编语言程序上机步骤,请填写出完成各步骤使用的系统程序的文件名字,并按照正确步骤给出操作顺序号。
操作名称 文件名 操作顺序
汇编 ( MASM ) ( 2 )
编辑 ( EDIT ) ( 1 )
连接 ( LINK ) ( 3 )
调试 ( DEBUG ) ( 4 )
5.自内存0F00:0006开始的内存单元中存放着80 32 56 98 76 B5这六个十六进制数据,试分别写出0F00:0008的字节型数据,字型数据、双字型数据的值。
字节型: ( 56 )
字型: ( 9856 )
双字型: ( B5769856 )
6.对于如下所示的数据定义,各指令语句的执行结果是什么(以十六进制数表示)?
VR1 DB -38,'456',?
VR2 DW 6,5 DUP(2)
① MOV AL, VR1 ( -38 )
② ADD VR2,59 ( 65 )
③ MOV BL,VR1+2 ( 53 )
7.对于第6小题,为VR1变量分配了( 5 )个字节,为VR2变量分配了( 12 )个字节。
8.汇编源程序的文件扩展名是( . ASM )。
9.以下语句汇编后,COUNT的值是( 9 )。
BUF1 DB 3,5,'ABCD$'
BUF2 DW 0FABH
COUNT EQU $-BUF1
10.保存当前栈顶地址的寄存器是( SP )。
11.在程序运行时执行的语句是( 指令 )语句,它告诉CPU要执行的操作。
12.( 伪指令 )语句是由汇编程序在汇编过程中执行的语句。
三、判断题(判断每题正误,正确的在题后括号内划 “√”,错误的划“×”)
1.汇编语言是用指令的助记符、符号地址、标号等符号书写程序的语言。 (√)
2.通过ASSUME伪指令给段寄存器赋初值。 (×)
3.在汇编语言中当缺省为十进制数时,表示十六进制数要用H结尾。 (√)
4.在DEBUG中,缺省值为十进制数。 (×)
5.在标志IF=0时,CPU忽略所有的中断请求。 (√)
四、简答
1.标号具有哪3种属性?该3种属性的属性值分别表示什么?
答:标号具有三种属性:段、偏移和类型属性。
①段属性:定义标号的段起始地址,此值必须在一个段寄存器中,而标号的段则总是在CS寄存器中。段属性值可以用SEG算符求得。
②偏移属性:标号的偏移地址是从段起始地址到定义标号的位置之间的字节数。标号偏移量属性值可由OFFSET算符求得。
③类型属性:类型属性用来指出该标号是在本段内引用还是在其他段中引用的。标号类型值可用TYPE算符求得。
第四章课外练习题
一、单项选择题:
1.若栈顶的物理地址为20100H,当执行完指令PUSH AX后,栈顶的物理地址为( D )。
(A)20102H (B)20101H (C)200FFH (D)200FEH
2.下列指令执行后,DAB中第一个字的内容是(B)。
DAB DB 0FAH,0DAH,0F5H,0D0H,5H
DAB_L EQU $-DAB
┆
MOV AL,DAB_L
XCHG DAB,AL
(A) 05DAH (B) 0DA05H (C) 0F5DAH (D) 0DAF5H
3.执行下列指令后,正确的结果是(B)。
MOV AL, 100
MOV BL, -2
(A)AL=100H,BL=02H (B)AL=64H,BL=0FEH
(C)AL=64H,BL=82H (D)AL=100H,BL=0FEH
4.完成同指令XCHG AX,BX相同功能的指令或指令序列是(D)。
(A)MOV AX,BX (B) MOV BX,AX
(C)PUSH AX (D) MOV CX,AX
POP BX MOV AX,BX
MOV BX,CX
5.为了使MOV AX,VAR指令执行后,AX寄存器中的内容为4142H,下面哪一条数据定义会产生不正确的结果?(C)
(A)VAR DW 4142H (B) VAR DW 16706
(C)VAR DB 42H,41H (D) VAR DW ‘AB’
6.假定用伪指令DATA DB 12H,34H定义了两个字节数据,现需要将数据12H取入寄存器AL,将数据34H取入寄存器AH,能完成此功能的程序段是(D)。
(A) MOV AX,DATA (B) MOV SI,DATA
MOV AX,[SI]
(C) LEA SI,DATA (D) MOV SI,OFFSET DATA
MOV AX,[SI] MOV AL,[SI]
MOV AH,[SI] MOV AH,[SI+1]
7.POP指令的操作数不能是( D )。
(A)BP (B)[BX] (C)字变量的SUM (D)CS
二、简答题
1.设ARRAY是字数组的首地址,写出将第5个字元素取出送AX寄存器的指令序列,要求使用以下几种寻址方式:
①直接寻址; (MOV AX,ARRAY+8)
②寄存器间接寻址; (LEA BX,ARRAY+8和MOV AX,[BX])
③变址寻址; (MOV SI,8和MOV AX,ARRAY[SI])
④基址变址寻址。 (LEA BX,ARRAY及MOV SI,8和MOV AX,[BX][SI])
2.设有以下程序段,求执行完此程序段后AL寄存器中的内容。(12H)
ABC EQU 2
DATA1 DB 20H
DATA2 DW 1234H
┆
MOV AL,DATA1+ABC
3.下列每组指令有何区别?
① MOV AX,1234H AX←1234H
MOV AX,[1234H] AX←1234H的地址
② MOV AX,TABLE AX←TABLE的数据
MOV AX,[TABLE] AX←TABLE的数据
③ MOV AX,TABLE AX←TABLE的数据
LEA AX,TALBE AX←TABLE的地址
④ MOV AX,BX AX←BX的内容
MOV AX,[BX] AX←BX的地址里的内容
4.写一指令序列,将3456H装入DS寄存器。
MOV AX,3456H
MOV DS,AX
5.不可以从堆栈向哪个段寄存器弹出数据?答:CS
6.若(SS)=2000H,(SP)=000AH,先执行将字数据1234H和5678H压入堆栈的操作,再执
SP
。
执行前SP 执行后SP 最后SP
7.在8086∕8088微处理器中,PUSH和POP指令在堆栈与寄存器或存储单元之间传送数据时,一次总是传送多少字节?答:2字节。
8.解释XLAT指令是怎样转换AL寄存器中的内容的。并编写一段程序用XLAT指令将BCD码的0~9转换成对应的ASCII,并将ASCII存入数组ARRAY中。
答:XLAT指令是通过AL寄存器加上BX寄存器联合组成的寻址方式找到目标地址后,将内容传送到AL寄存器中。程序如下:
.MODEL SMALL
.STACK
.DATA
BCD DB -7
BCD2ASCTAB DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
ARRAY DB ?
.CODE
.STARTUP
MOV AL,BCD
LEA BX,BCD2ASCTAB
XLAT
MOV ARRAY,AL
.EXIT 0
END
9.下列ASCII字符串(包括空格符)依次存储在首地址为CSTRING的字节单元中: CSTRING DB ‘BASED ADDRESSING’
请编写指令将字符串中的第一个和第七个字符传送给DX寄存器。
MOV DL,CSTRING
MOV DH,CSTRING+6
10.请编写指令将BX寄存器初始化为变量MYDAT的偏移地址。
MOV BX,OFFSET MYDAT或LEA BX,MYDAT
11.将变量名TABL的段地址送AX的指令是什么?
MOV AX,SEG TABL
12.设MEM是数据段中0A00H单元的符号名,其中存放的内容为0B0CH,以下各指令语句的执行结果是什么?
①MOV AX,MEM 答: 0B0CH
②LEA BX,MEM 0A00H
三、程序分析题
1. A DW 1234H
B DW 5678H
┆
PUSH A
PUSH B
POP A
POP B
试回答:
①上述程序段执行后(A)=5678H,(B)=1234H
②执行前SP=200H,执行后SP=200H
四、判断题(判断每题正误,对的在题后括号内划 “√”,错的划“×”)
1.MOV ES,BX (√)。
2.MOV CS,BX (×)。
3.IN AL,DX (√)。
4.POPF AX (×)。
5.POP 1234 (×)。
6.PUSH A(A为字节单元) (√)。
7.执行LEA BX,TABLE与执行MOV BX,OFFSET TABLE效果一样 (√)。
8.当执行LAHF和SHAF两条指令后,标志位不改变 (×)。
第五章课外练习题
一、单项选择题:
1.假定AX的内容为-32768,在执行了指令NEG AH后,标志位(SF,OF)为(D)。
(A)0,0 (B)0,1 (C)1,0 (D)1,1 2.已知AL,BX为带符号数,计算AL×BX的乘积,使用下述程序段(D)
(A) MOV AH,0
MUL BX
(B) MOV AH,-1
IMUL BX
(C) MOV AH,0
IMUL BX
(D) CBW CBW指令进行字节和字的混合运算 字节--→字
IMUL BX CWD------字-→双字
3.已知AL,BX为无符号数,计算AL×BX的乘积,使用下述程序段( C )
(A)MUL BX (B)IMUL BX (C) MOV AH,0(D)CBW
MUL BX MUL BX
无符号数不能用CBW
4.当执行指令ADD AX,BX后,若AX的内容为2BA0H,设置的奇偶标志位PF=1,下面的叙述正确的是(A)。
(A)表示结果中含1的个数为偶数 (B)表示结果中含1的个数为奇数 (C)表示该数为偶数 (D)表示结果中低八位含1的个数为偶数 5.设AH=0,AL=06H,BL=09H,执行下列两条指令之后,其结果应是(A)。
ADD AL,BL
AAA AL寄存器的低四位在A和F之间,或AF标志是1,加6调整,AH加1 (A)AH=01,AL=05 (B)AH=1, AL=15 (C)AH=0 ,AL=0FH (D)AH=0, AL=05
6.设AL=0B4H,BL=11H,指令“MUL BL”和指令“IMUL BL”分别执行后OF,CF的值为(B)。
(A)OF=1,CF=0 (B)OF=1,CF=1 (C)OF=0,CF=0 (D)OF=0,CF=1
7.当执行完下列两条指令后,标志位CF和SF的值为( D )。
MOV AL,0C4H ADD AL,9DH (A)0,0 (B)1,1 (C)0,1 (D)1,0
二、判断题(判断每题正误,对的在题后括号内划 “√”,错的划“×”)
1.ADD [SI], [BX] ( × ) 2.ADD AX, 100 ( √ ) 3.ADD AX, BL ( × ) 4.ADD [SI], 100 ( √ ) 5.ADD ES, BX ( √ ) 6.INC [BX] ( √ )
7.SUB BYTE PTR [SI],1 ( √ ) 8.DEC [BX],1 ( × )
三、指出下列指令中的错误,并写出与该条指令意义相近的所有可能的正确指令。
1.ADD BH, AX
(类型错误。改正:ADD BX,AX) 2.SUB 100H,AX
(立即数不可做目标操作数。改正:SUB AX,100H) 3.MOV DS, 100H
(立即数不可以直接向段寄存器送数。改正:MOV AX,100H和MOV DS,AX) 4.MOV [DI], [100H]
(两个操作数不可以同时是存储器中的数。改正:MOV AX,[100H]和MOV [DI],AX) 5.INC 100H
(立即数不可做目标操作数。改正:MOV AX,100H和INC AX) 6.MOV AL, ARRAY [BX][BP]
(没有此寻址方式。改正:MOV AL,ARRAY [BX][SI]) 7.ADD [BX],[SI]
(两个操作数不可以同时是存储器中的数。改正:MOV AX,[SI]和ADD [BX],AX) 四、填空题
1.当执行MUL BX指令后,乘积的高半部分在(DX)中,低半部分在(AX)中。
2.当执行DIV BX指令后,被除数在(DX,AX)中,所得商在(AX)中,余数在(DX)中。 3.已知AL, BL中数据为无符号数,若求AL∕BL的商,应使用指令序列为:
(MOV AH,0)和(DIV BL)。
4.已知AL, BL中数据为带符号数,若求AL∕BL的商,应使用指令序列为:
(CBW ) 和( IDIV )。
5.用一条语句实现AX的内容加1,要求不影响CF(INC AX )。
6.将AX的内容,减去0520H,和上次运算的借位,选用(SBB AX,0520H)指令。 7.在SUB AX,BX指令执行后,CF=1,说明:
①最高有效位(有借位)。
②对(无符号)数,操作结果溢出。
五、简答题
1.写一指令序列,完成将存于AX、BX中的压缩BCD数加到存于CX、DX中的8位BCD数上的操作。
PUSH AX
MOV AL,BL ADD AL,DL DAA
MOV DL,AL MOV AL,BH ADC AL,DH DAA
MOV DH,AL POP BX
MOV ADC DAA MOV MOV ADC DAA MOV
AL,BL AL,CL CL,AL AL,BH AL,CH CH,AL
第六章课外练习题
一、单项选择题:
1.JMP SI的目标地址偏移量为( A )。
(A)SI的内容 (B)SI所指向的内存字单元之内容 (C)SI+IP的内容 (D)IP+ [SI] 2.JMP WORD PTR [BX]转移的目标地址是( D )。
(A)BX的内容 (B)SP+BX之和 (C)IP+ [BX]之和 (D)BX指出的内存单元之内容 3.当A≥B时转移的条件转移指令为(A,B为带符号数)( D )。
(A)JA (B)JAE (C)JG (D)JGE
4.已知X,Y为带符号数,两个数比较后,欲判断X≤Y发生转移,应使用( C )指令。
(A)JBE (B)JL (C)JNG (D)JNA
5.假定AX和BX寄存器中存放的是有符号整数,如果AX>BX则转移到LABEL,应采用下面哪一条指令序列?( D )。
(A) SUB AX,BX (B) SUB AX, BX
JC LABEL JNC LABEL
(C) CMP AX, BX (D) CMP AX, BX
JA LABEL JG LABEL
6.已知AX=8078H, BX=5610H,指令CMP BL,AH执行后OF,CF的值为( D )
(A)0,0 (B)0,1 (C)1,0 (D)1,1 7.在汇编下列条件转移指令中,两条指令功能不一样的是( D )。
(A)JZ 与JE (B)JC与JB (C)JA与JNBE (D)JP与JS 8.循环指令LOOPNZ终止循环的条件是( B )。
(A)CX=0,且ZF=0 (B)CX=0, 或ZF=1 (C)CX0,且ZF=0 (D)CX0, 或ZF=1
9.在循环次数已知的情况下,采用哪种方法控制循环程序最方便( A )。
(A)计数法 (B)条件控制法
10.循环控制指令隐含指定哪个寄存器作为循环计数器( B )。
(A)CL (B)CX (C)AL (D)AX
二、判断题(判断每题正误,对的在题后括号内划 “√”,错的划“×”):
1.两个数相等时进行转移可用JZ指令 ( √ ) 2.当PF=1时发生转移的条件转移指令为JPO ( × ) 3.当X
1.当两个数不相等时,发生转移的条件转移指令有JNE和( JNZ )。 2.当PF=0时,发生转移的条件转移指令为JNP和( JPO )。
3.当A≥B(A,B为无符号数)时,发生转移的条件转移指令有( JAE )( JNB )。
4.设有下列程序段: ADD AX, BX JNO L1 JNC L2 SUB AX, BX JNC L3 JNO L4 JMP SHORT L5
如果AX和BX的内容如习题4图形,则该程序分别执行后,程序转向哪里? 四、程序分析题
1.阅读如下程序,回答所提出的问题,假定X1,X2,...Xn为无符号数。 .MODEL SMALL .STACK .DATA
BLOK DW X1,X2,..,Xn COUNT EQU ($-BLOK)/2 RESULT DW COUNT,?
.CODE .STARTUP
LEA BX,BLOK-2 MOV CX,RESULT XOR AX,AX
GOON:
ADD BX,2 CMP AX,[BX] JAE NEXT MOV AX,[BX]
NEXT:
LOOP GOON
MOV RESULT+2,AX
.EXIT 0 END
程序执行完,回答下述问题:
RESULT+2字存储单元的内容=MAX(X1,X2,..,Xn) 程序循环次数=( COUNT ) [BX]=( Xn )
2.下列程序完成的是什么功能?(SUMn=|BUF1n|+|BUF2n|。两个数组BUF1和BUF2对应位绝对值之和存入SUM对应位)
LEA SI, BUF1 LEA BX, BUF2 LEA DI, SUM MOV CX, 100
AGAIN:
MOV CMP JGE NEG
K1:
MOV CMP JGE NEG
K2:
ADD AX, DX MOV [DI], AX ADD SI, 2 ADD DI, 2 ADD BX, 2 LOOP AGAIN
3.下列程序完成的是什么功能?(DATX1数组中后100个数送DATX2数组中) DATX1 DB 300 DUP(?) DATX2 DB 100 DUP(?)
┆
MOV SI,0 MOV DI,0 MOV BX,200 MOV CX,100
NEXT:
MOV AL,DATX1 [BX][SI] MOV DATX2 [DI],AL INC SI INC DI LOOP NEXT
4.假设X和X+2单元的内容为双字数据P,Y和Y+2单元的内容为双字数据Q(X单元与Y单元为低位字),说明下列程序段完成什么工作?()
MOV DX, X+2
MOV AX, X
ADD AX, X
ADC DX, X+2
CMP DX, Y+2
JL L2
JG L1 CMP AX, Y JBE
L2
AX,
AX, K1 AX DX, BX, K2 BX
[SI] 0
[BX] 0
MOV AX, 1 HLT
L2: MOV AX, 2
HLT
5.指出以下程序执行后ANS的内容是什么?(在三个带符号数中求最大数。即ANS=1240H) L1:
DSEG SEGMENT
D1 DW 9CC0H D2 DW 1240H D3 DW 0620H ANS DW ?
DSEG ENDS
CSEG SEGMENT
ASSUME DS:DSEG,CS:CSEG
START:
MOV AX,DSEG MOV DS,AX MOV AX,D1 CMP AX,D2 JG CMP13 MOV AX,D2 CMP AX,D3 JG OK
D3G: MOV AX,D3
JMP OK
CMP13: CMP AX,D3
JL D3G
OK: MOV ANS,AX
MOV AH,4CH INT 21H
CSEG ENDS
END START
6.下述程序段运行后,S9开始的10个字节存储单元内容是什么?(9,8)
DATA SEGMENT
S9 DB 0,1,2,3,4,5,6,7,8,9 DATA ENDS
┆
LEA SI,S9 LEA DI,S9+1 MOV CX,5
LOP: MOV AL,[SI]
XCHG AL,[DI]
1,0,3,2,5,4,7,6,
MOV [SI],AL ADD SI,2 ADD DI,2 DEC CX JNZ LOP
7.指出下列程序段执行后AL内容是什么?
① ┆(60H) MOV AL, 60H CMP AL, 0BBH JB L2 L1:MOV AL, 0BBH L2:NOP ;NOP为空操作
② ┆(61H) MOV AL, 60H CMP AL, 0BBH JL L2 L1:INC AL L2:NOP ;NOP为空操作 ④ ┆(0) XOR AL, AL
MOV BL, 98H ADD BL, 88H JNO L2
L1:MOV AL, 0 L2:NOP ;NOP为空操作
③ ┆(0FFH)
XOR AL, AL
MOV BL, 98H ADD BL, 88H JNC L2 L1:DEC AL L2:NOP ;NOP为空操作
8.指令序列为: CMP AX, BX JX L1
请在能引起转移到L1单元的条件转移指令下面划“√”,
五、编程题
1.将AX寄存器中的16位数分成4组,每组4位,然后把这4组数分别放在AL、BL、CL和DL中的最低4位。
MOV CL,4 MOV DL,AL AND DL,0FH MOV BL,AH AND BL,0FH ROL AX,CL
AND AL,0FH MOV CL,AH AND CL,0FH
2.将BUF有符号双字节数据区中的最大数及最小数分别送MAX及MIN存储单元。 .数据段
BUF DW 1010H,2030H,19H,5555H,3435H,0FFFFH COUNT EQU ($-BUF)/2 MAX DW ? MIN DW ? .代码段
MOV CX, COUNT DEC CX
OUTLP: MOV DX,CX
LEA BX,BUF
INLP: MOV AX,[BX]
CMP AX,[BX+2] JL NEXT
XCHG AX,[BX+2] MOV [BX],AX
NEXT: ADD BX,2
DEC DX JNZ INLP LOOP OUTLP
MOV AX,BUF[0]
MOV BX,BUF[COUNT+COUNT-2] MOV MIN,AX MOV MAX,BX
3.已知一多字节数据存放在内存DATA开始的连续单元中,数据长度在LEN单元,编制程序计算其绝对值并存入原单元。
MOV SI,0
MOV CX,LEN
MOV AL,DATA[LEN-1] CMP AL,0 JGE QUIT0 CLC
AGAIN:
MOV AL,0 SBB AL,DATA[SI] MOV DATA[SI],AL INC SI
LOOP AGAIN QUIT0: NOP
4.编制程序,将一个包含有20个数据的数组M分成两个数组:正数组P和负数组N。
MOV BX,0 MOV SI,0 MOV DI,0 MOV CX,20
AGAIN:MOV AL,M[BX]
CMP AL,0 JL FS
MOV P[DI],AL INC DI JMP OK
FS: MOV N[SI],AL
INC SI
OK: INC BX
LOOP AGAIN
5.在首地址为DATA的数组中,存放了100H个16位补码数。求出它们的平均值放在AX寄存器中,并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中。
MOV AX,0 MOV SI,0 MOV CX,100
AGAIN:ADD AX,DATA[SI]
ADD SI,2 LOOP AGAIN MOV DX,0 MOV CX,100 IDIV CX ;AX为平均数 MOV BX,0 MOV SI,0 MOV CX,100
AGA: CMP AX,DATA[SI]
JGE NEXT INC BX ;BX为小于AX的个数
NEXT: ADD SI,2
LOOP AGAIN1
6.编写程序,求出首地址为DATA的100字无符号数组中的最小偶数,并把它存放AX中。
MOV AX,0FFFFH ;假设FFFFH是本数组中的最小偶数 MOV SI,0 MOV CX,100
AGAIN:MOV BX,DATA[SI]
TEST BX,1 JNZ NEXT CMP AX,BX
JB
MOV
NEXT: ADD
LOOP NEXT AX,BX SI,2 AGAIN
7.设有一段英文,其字符变量名为ENG,试编写一个程序,查对单词READ在该文中出现次数并存放在BX寄存器中。
.MODEL SMALL
.STACK
.DATA
ENG DB 'SNNREADRAREADUNSUN'
CNTENG EQU $-ENG
KEYWORD DB 'READ'
CNTKEY EQU $-KEYWORD
.CODE
.STARTUP
PUSH DS
POP ES
XOR AL,AL
LEA BX,ENG
MOV DX,CNTENG
SUB DX,CNTKEY
INC DX
CLD
AGAIN: MOV DI,BX
LEA SI,KEYWORD
MOV CX,CNTKEY
REPZ CMPSB
JNZ LOP1
INC AL
LOP1: INC BX
DEC DX
JNZ AGAIN
.EXIT 0
END
8.测试AL寄存器的最低位是否为0,若为0,跳转到B1,否则,跳转到B2。
TEST AL,1
JZ B1
JMP B2
9.比较两个字符串STARING1和STARING2所含字符是否完全相同,若相同则显示“MATCH”,不同则显示“NO MATCH”。
.MODEL SMALL
.STACK
.DATA
NO_MA DB ‘NO_MATCH’,0DH,0AH,’$’
MAT DB ‘MATCH’,0DH,0AH,’$’
.CODE
.STARTUP
MOV SI,0
MOV DI,0
MOV CX,COUNT
AGAIN:MOV AL,STRING1[SI]
CMP AL,STRING2[DI]
JZ MA
MOV DX,OFFSET NO_MA
MOV AH,9
INT 21H
JMP OK
MA: INC SI
INC DI
LOOP AGAIN
MOV DX,OFFSET MAT
MOV AH,9
INT 21H
OK:
.EXIT 0
END
10.设在变量单元A、B和C中存放有三个数, 若三个数都不为0,
0,则将其他两个单元也清零,请编写此程序。
MOV AX,A
CMP AX,0H
JZ NEXT
MOV BX,B
CMP BX,0H
JZ NEXT
MOV CX,C
CMP CX,0H
JZ NEXT
ADD D,AX
ADD D,BX
ADD D,CX
JMP OK
NEXT: MOV A,0
MOV B,0
MOV C,0
OK: NOP
11.设变量X为带符号整数,试按下面的要求编制此程序:
①如果X的绝对值大于5,变量FX赋值为零。
②如果X的绝对值不大于5,变量FX赋值为1—X 则求出三个数之和存入D
中;若有一个为
MOV FX,0
MOV AX,X
CMP AX,0H
JG NEXT
NEG AX
NEXT: CMP AX,5
JA OK
NEG AX
ADD AX,1
MOV FX,AX
OK: NOP
12.编制程序计算(见下图):
设X,Y为双字节带符号数据,分别存放在DAX,DAY单元,计算结果存入RLT单元。
X×Y (Y>0,X>0)
S= X÷Y (Y
|X+Y| (其它)
MOV AX,DAX
MOV BX,DAY
CMP AX,0H
JL NEXT
CMP BX,0H
JL QT
IMUL BX
JMP OK
NEXT: CMP BX,0
JGE QT
MOV DX,0
IDIV BX
JMP OK
QT: ADD AX,BX
JNS OK
NEG AX
OK: MOV RLT,AX
第七章课外练习题
一、单项选择题:
1.完成将累加器AL清零,并使进位标志CF清零,下面错误的指令是(A )。
(A)MOV AL,00H (B)AND AL,00H
(C)XOR AL,AL (D)SUB AL,AL
2.下列指令执行后总是使CF=0,OF=0的是(A )。
(A)AND (B)NEG (C)NOT (D)INC
3.若(AX)=10101101B,为了使其内容变为01010010B,下列(A)指令执行一次即可完成此操作?
(A)NOT指令 (B)OR指令 (C)AND指令 (D)XOR指令
4.实现将DX:AX中存放的32位数扩大四倍,正确的程序段是(C )。
(A)SHL AX,2 (B) RCL AX,2
ROL DX,2 SHL DX,2
(C)MOV CX,2 (D) SHL AX,1
LOP: SHL AX,1 SHL AX,1
RCL DX,1 RCL DX,1
LOOP LOP RCL DX,1
5. TA1 DW 0102H,0304H,0506H
TA2 DB 02H,04H,06H
┆
MOV BX, OFFSET TA1
ADD BL, TA2+2
MOV BX, [BX]
AND BX, 0FFH
ADD BH, BYTE PTR TA1 [BX]
上述指令序列运行后,BX的内容是(B)。
(A)0605H (B)0402H (C)0606H (D)0204H
6.NEXT是某指令语句标号,下述哪个程序段不能实现转移到NEXT语句执行(C )。
(A) JMP NEXT (B) MOV BX, OFFSET NEXT
JMP BX
(C) MOV BX, NEXT (D) LEA AX, NEXT
JMP BX JMP AX
7.测试BL内容是否与数据4FH相等,若相等则转NEXT处执行,可实现的是(D )。
(A) TEST BL,4FH (B) OR BL,4FH
JZ NEXT JZ NEXT
(C) AND BL,4FH (D) XOR BL,4FH
JZ NEXT JZ NEXT
8.下面指令序列测试BH中的数是否为奇数,若为奇数则转移至K1处,括号处的指令应为(A )。
TEST BH,01H
( ) K1
(A)JNE (B)JZ (C)JS (D)JC
9.下面指令序列测试BX中的数是否为负数,若为负数则转移至F1处,不正确的指令序列应为
(C )。
(A) TEST BX,8000H (B) AND BX,BX
JNZ F1 JS F1
(C) CMP BX,0H (D) SUB BX,0H
JNS F1 JL F1
10.编写分支程序,在进行条件判断前,可用指令构成条件,下列指令中不能形成条件的指令是
(D )。
(A)CMP (B)SUB (C)AND (D)MOV
11.为使CX= -1时,转至MINUS而编制了一指令序列,其中错误的序列是(D)。
(A) INC CX (B) SUB CX,0FFFFH
JZ MINUS JZ MINUS
(C) AND CX,0FFFFH (D) XOR CX,0FFFFH
JZ MINUS JZ MINUS
二、程序分析题
1. AND AL, AL
JZ BRCH1
RCR AL, 1
JZ BRCH2
RCL AL, 1
INC AL
JZ BRCH3
┆
上述程序运行后,请回答:
①当AL=( 0 )时,程序转向BRCH1;
②当AL=( 1 )时,程序转向BRCH2;
③当AL=( -1 )时,程序转向BRCH3。
2.现有下列程序段:
MOV AX,6540H
MOV DX,3210H
MOV CL,04
SHL DX,CL
MOV BL,AH
SHL AX,CL
SHR BL,CL
OR DL,BL
试问上述程序段运行后,(AX)=(5400H),(BL)=(06H)(DX)=(2106H)
3.分析下面程序段:
MOV AL,200
SAR AL,1
MOV BL,AL
MOV CL,2
SAR AL,CL
ADD AL,BL
试问程序段执行后(BL)=(0E4H),(AL)=(0DDH)
4.程序段如下:
BLK1 DB 46,84,34,-5,20,122,73
┆
MOV CX,7
LEA SI,BLK1
NEXT: MOV AL,[SI]
INC SI
TEST AL,81H
LOOPZ NEXT
MOV BL,[SI]
请回答程序段运行后:(AL)=(0FB)H,(BL)=(14)H
四、用最少的程序编写下列程序段:
1.编写完成下列功能的小程序段:
⑪ 将寄存器AL的第4,3位取反,其余位保持不变。
XOR AL, 00011000B
⑫ 将寄存器AL的第4,3位清零,其余位保持不变。
AND AL, 11100111B
⑬ 将寄存器AL的第4,3位置1,其余位保持不变。
OR AL, 00011000B
⑭ 将寄存器AL的第4,3位写入MEN单元中的第4,3位,其余位保持不变。
AND AL,00011000B
AND MEN,11100111B
OR MEN,AL
⑮ 将寄存器AL的第i位写入MEN单元的第i位,其余位保持不变,i值在CL中。
MOV BL, 1
SHL BL, CL
AND AL, BL
NOT BL
AND MEN, BL
OR MEN, AL
⑯ 将寄存器AL的第i+1,i位写入MEN单元的第i+1,i位,其余位保持不变,i值在CL中。
MOV BL, 3
SHL BL, CL
AND AL, BL
NOT BL
AND MEN, BL
OR MEN, AL
⑰ 如果寄存器AL的第6,5位为00,则将AH清0,否则置全1。
TEST AL, 01100000B
JZ L1
MOV AH,0FFH
JMP OK
L1: MOV AH,0
OK: NOP
⑱ 如果寄存器AL的第6,5位为01,则将AH清0,否则置全1。
AND AL,01100000B
CMP AL,00100000B
JZ L1
MOV AH,0FFH
JMP OK
L1: MOV AH,0
OK: NOP
⑲ 如果寄存器AL的第6,5位为10,则将AH清0,否则置全1。
AND AL,01100000B
CMP AL,01000000B
JZ L1
MOV AH,0FFH
JMP OK
L1: MOV AH,0
OK: NOP
⑳ 如果寄存器AL的第6,5位为11,则将AH清0,否则置全1。
AND AL,01100000B
CMP AL,01100000B
JZ L1
MOV AH,0FFH
JMP OK
L1: MOV AH,0
OK: NOP
⑴ 如果寄存器AL的数据为偶数,则将AH清0,否则置全1。
TEST AL, 1
JZ L1
MOV AH,0FFH
JMP OK
L1: MOV AH,0
OK: NOP
⑵ 如果寄存器AL的数据为正数,则将AH清0,否则置全1。
TEST AL, 80H
JZ L1
MOV AH,0FFH
JMP OK
L1: MOV AH,0
OK: NOP
2.不允许使用乘法指令来完成AX与12的乘法运算。
SHL AX, 1 ;将AX乘2(等于2倍)
MOV BX, AX ;预存一份AX在BX内
SHL AX, 1 ;将AX再乘2(等于4倍)
ADD AX, BX ;加上原有2倍(等于6倍)
SHL AX, 1 ;再乘2(等于12倍)
3.写一指令序列,将DX与AX中的双字左移三位。
MOV CX,3
LOP: SHL AX,1
RCL DX,1
LOOP LOP
4.内存单元MEMB存放着一个8位的数据,将它的高4位与低4位互换。
MOV CL, 4
ROL MEN, CL
5.将AL的第7位和第0位,第6位和第1位,第5位和2第位,第4位和第3位互换。
MOV CX,7
MOV BL,0
LOP: MOV AH,AL
AND AH,1
ADD BL,AH
SHR AL,1
SAL BL,1
LOOP LOP
ADD AL,BL
五、简答题
1.至少使用三种方法(提示:MUL、SHL和SHR指令)实现将DATA中的字节数据乘以64的指令序列。
① MOV AL,64
MUL DATA
② MOV CL,6
SHL DATA,CL
③ MOV AH,DATA
MOV AL,0
SHR AX,2
MOV DATA,AL
第九章课外练习题
一、单项选择题:
1.已知CALL BX执行前SP=100H,执行后SP的内容为( D )。
(A)100H (B)102H (C)98H (D)0FEH
2.已知SP=100H,指令RET(远返回)执行后SP的值为( B )。
(A)106H (B)104H (C)0FCH (D)0FAH
3.已知SUBR是一个属性NEAR的子程序,下述调用SUBR子程序的指令序列中,哪一个不能实现调用SUBR的目的( C )。
(A)CALL SUBR (B)CALL NEAR PTR SUBR
(C)MOV BX,OFFSET SUBR (D)MOV BX,OFFSET SUBR
CALL NEAR PTR [BX] CALL BX
4.下面是将某存储区清0的宏定义,如将BUFF开始的100个存储单元清0,则其宏调用格式为( C )。
CLEAR MACRO DIR,DST,CNT
DIR
LEA DI,DST
MOV CX,CNT
XOR AL,AL
REP STOSB
ENDM
(A)CLEAR BUFF,100 (B)CLEAR STD,BUFF,100
(C)CLEAR CLD,BUFF,100 (D)CLEAR BUFF,STD,100
5.宏指令库以( C )格式存放在磁盘上。
(A)可执行代码 (B)目标代码 (C)源代码
6.汇编程序使用( C )伪指令使重复块重复多次。
(A)LOOP (B)REPE (C)REPT (D)LOCAL
二、判断题(判断每题正误,对的在题后括号内划 “√”,错的划“×”)
1.CALL WORD PTR[SI] ( × )
2.CALL [BX] [SI] ( × )
3.CALL AX ( × )
4.CALL [BX] ( √ )
5.CALL NEAR PTR [SI] ( × )
6.CALL FAR PTR [SI+2] ( × )
7.宏的处理是在程序执行过程中处理的 ( × )
8.宏定义中的形式参数可以多于宏调用的实在参数 ( √ )
三、填空题
1.调用程序与子程序之间的参数传递方法有三种,即堆栈法(寄存器法)(存储单元)。
2.LOCAL用于说明局部标号的伪指令,它只允许在(宏程序中)使用,其位置必须在(第一条指令前)。
四、简答题
1.指出CALL指令与JMP指令的异同?
答:相同----都可以无条件跳转到目标地址。不同---CALL指令有返回,而JMP没有;CALL指令影响堆栈段的变化,而JMP不影响堆栈段。
3.段内调用和段间调用的异同点是什么?
答:段内调用是指在调用和返回过程中,转返地址不涉及CS的变化,只通过IP内容的变化实现控制的转返;而段间调用需要CS,由CS和IP的变化共同决定控制的转返。
4.主程序和子程序之间有哪几类参数传递方法?
答:主程序与子程序之间的参数传递方法有三种,即堆栈法、寄存器法和存储单元。
5.子程序说明文件由哪几个部分组成?并分别说明各组成部分的含义?
答:编写子程序的目的在于减少源程序中某些相同功能程序段的重复书写,以利于自己和他人编写程序时使用。一般包含下述几项内容:
(1)子程序名称:用子程序定义伪指令定义该子程序时的名字;
(2)子程序功能:用自然语言或数学语言等形式简单清楚地描述子程序完成的任务;
(3)入口参数:说明子程序要求有几个入口参数,这些参数表示的意义及存放位置;
(4)出口参数:说明子程序要求有几个输出参数(运行结果),这些参数表示的意义及存放位置;
(5)受影响的寄存器:说明子程序运行后,哪些寄存器的内容被破坏了,以便使用者在调用该子程序之前注意保护现场。
五、程序分析题
1.下述程序段运行后,AL=( 88H ),CL=( 80H )
MOV AL,38H
MOV BL,49H
CALL SUBO
INC AL
DEC CL
„
SUBO PROC
ADD AL,BL
MOV CL,AL
DAA
RET
SUBO ENDP
2.宏指令GOTO L,X,REL,Y(其中REL可以是Z,NZ,L,NL等)定义如下:
GOTO MACRO L,X,REL,Y
IFB
JMP L
①展开宏调用GOTO LOP,SUM,NZ,15
MOV AX,SUM
CMP AX,15
JNZ LOP
②该宏指令的功能。
②可以根据不同情况产生无条件转移指令或比较和条件转移指令。
六、填空完善程序
1.下面是计算S=X2+Y2的程序,其中平方值的计算是用直接查表法编写的SQ1子程序。设在DAX,DAY单元存放一个-9~+9的字节数据,在SQRTAB数据区中存放了0~9的平方值,将结果存入SQR单元。
.MODEL SMALL
.STACK
.DATA
DAX DB -7
DAY DB 4
SQRTAB DB 0,1,4,9,16,25,36,49,64,81
SQR DB ?
.CODE
.STARTUP
MOV AL,DAX
CALL SQ1
MOV CL,AL
( MOV AL,DAY )
CALL SQ1
ADD CL,AL
( MOV SQR,AL )
.EXIT 0
SQ1 PROC NEAR
( TEST AL,80H )
JZ K1
NEG AL
K1: LEA BX,SQRTAB
( XLAT )
RET
SQ1 ENDP
END
ELSE MOV CMP J&REL ENDIF ENDM 回答下列问题: ①宏展开: 1 1 1 AX,X AX,Y L
2.请根据下面子程序的说明文件填充其中的空白。子程序的说明文件如下:
子程序名称:AVER
子程序功能:求一组带符号数据的平均值
入口参数:数据的首地址在DS:SI中存放,数据个数存放在CL中
出口参数:AL=数据的平均值
AVER PROC
PUSH SI
PUSH CX
XOR BX,BX
( MOV CH,0 )
NEXT: LODSB
( CBW )
ADD BX,AX
LOOP NEXT
POP CX
( MOV AX,BX )
IDIV CL
( POP SI )
RET
AVER ENDP
七、改错题:下面是将AL中低4
用。程序中有错,请改正。 ALTOASC MACRO AND AL,0FH JL ALLN1 ADD AL,7 ALLN1: ADD AL,30 ALTOASC END 八、编程题
1.编写一个子程序,完成自然数1~100的求和运算。
SUM PROC NEAR
PUSH AX
PUSH CX
MOV AX,0
MOV CX,100
AGAIN:
ADD AX,CX
LOOP AGAIN
POP CX
POP AX
SUM ENDP
2.编写多字节加法子程序,写出子程序说明文件。
子程序名称:PADD
子程序功能:多字节加法
入口参数:两数据的首地址分别为DATA1和DATA2,数据个数存放在CX中
出口参数:多字节数据的和存放在首地址为SUM的内存中
受影响的寄存器:AX、BX、CX。
PADD PROC NEAR
MOV BX,0
MOV CX,LEN
CLC
AGAIN:
MOV AL,DATA1[BX]
ADC AL,DATA2[BX]
MOV SUM[BX],AL
INC BX
LOOP AGAIN
PADD ENDP
3.数据区保存有10个学生的学习成绩,要求编写一个子程序,将每个学生的成绩转换成五个等级(A:90~100;B:80~89;C:70~79;D:60~69;E:60以下),然后将等级存放在原数据位置。要求:用寄存器传递参数方法来做。
COV PROC NEAR
PUSH AX
PUSH BX
PUSH CX
MOV BX,0
MOV CX,10
AGAIN:
MOV AL,DATA[BX]
CMP AL,60
JL A60
CMP AL,70
JL A70
CMP AL,80
JL A80
CMP AL,90
JL A90
MOV DATA[BX],41H
JMP LOP
A90: MOV DATA[BX],42H
JMP LOP
A80: MOV DATA[BX],43H
JMP LOP
A70: MOV DATA[BX],44H
JMP LOP
A60: MOV DATA[BX],45H
LOP: INC BX
LOOP AGAIN
POP CX
POP BX
POP AX
COV ENDP
4.编写计算某项比赛参加者平均分的子程序。给定条件:12名评委,每名评委给分范围0~10分(整数),存放在DATAX数组中,将平均分的整数部分存入AVERAGE单元。
AVE PROC NEAR
;===SUM====
MOV CX, 12
MOV SI, 0
MOV AL, 0
AGAIN:
ADD AL,DATAX[SI]
INC SI
LOOP AGAIN
;=====MAX=====
MOV SI, 0
MOV BL,0
MOV CX,12
AGAIND:
CMP BL,DATAX[SI]
JA NEXTD
MOV BL,DATAX[SI]
NEXTD: INC SI
LOOP AGAIND
;====MIN=====
MOV SI, 0
MOV BH,0
MOV CX,12
AGAINX:
CMP BH,DATAX[SI]
JB NEXTX
MOV BH,DATAX[SI]
NEXTX: INC SI
LOOP AGAINX
SUB AL,BL
SUB AL,BH
CBW
MOV CL,12
DIV CL
MOV AVERAGE,AL
AVE ENDP
5.定义将任一个寄存器循环左移或右移N位的宏指令。
YIWEI MACRO REG,LR,N
MOV CL,N
RO&LR REG,CL
ENDM
6.试定义求两个多字节数之和的宏指令。
MADD MACRO SRC,DST,SUM,LEN
LOCAL AGAIN
MOV BX,0
MOV CX,LEN
CLC
AGAIN:
MOV AL,SRC[BX]
ADC AL,DST[BX]
MOV SUM[BX],AL
INC BX
LOOP AGAIN
ENDP
第十章课外练习题
一、单项选择题:
1.中断向量是指( B )。
(A)中断向量表的地址 (B)中断处理子程序的入口地址
(C)被中断程序的入口地址 (D)被中断程序的断点地址
2.8086∕8088微处理器可访问的I ∕ O地址空间大小为( B )。
(A)1KB (B)64KB (C)1MB (D)16MB
3.以80X86为CPU的PC机,在实地址工作方式下,其中断向量长度为( B )。
(A)8个字节 (B)4个字节 (C)2个字节 (D)1个字节
4.在下列指令中,有( B )指令是不合法的。
①MOV [SI],[DI]
②IN AL,DX
③LEA AL,SI
④JMP WORD PTR [BX]
(A)1条 (B)2条 (C)3条 (D)4条
5.根据下面提供的PC机内存中的数据,INT 11H中断服务程序的入口地址是( B )。 0000:0040 B3 18 8A CC 4D F8 00 F0—41 F8 00 F0 C5 18 8A CC 0000:0050 39 E7 00 F0 A0 19 8A CC—2E E8 00 F0 D2 EF 00 F0
(A)4DF8:00F0 (B)F000:F84D (C)A019:8ACC (D)CC8A:19A0
二、填空题
1.在IBM—PC机中,CPU与外设之间的信息交换通常采用(查询)方式、(中断)方式和DMA方式。
2.(中断)是一种使CPU中止正在执行的程序而转去处理特殊事件的操作。
三、简答题
1.请叙述I/O地址空间的含义?
答:I/O地址的空间存在与接口电路中,CPU对此空间的访问采用I/O指令完成。此地址空间大小为64KB。
2.IRET指令的主要作用是什么?
答:IRET中断返回指令。它使CPU从中断服务程序返回被中断的断点处继续执行。
3.计算机硬件中为什么采用接口装置?分为哪两类接口?
答:其一,CPU与外设两者的信号线不兼容;其二,两者的工作速度不兼容;其三,若不通过接口,而由CPU直接对外设的操作实施控制,就会使CPU处于穷与应付与外设打交道之中,大大降低CPU的效率;其四,若外设直接由CPU控制,也会使外设的硬件结构依赖与CPU,对外设的发展不利。因此,在CPU与外设之间有必要设置接口装置,以便协调CPU与外设两者的工作,提高CPU的效率,并有利于外设按只身的规律发展。接口分为并行分为和串行分为。
4.通常所说的I/O操作是指CPU直接对I/O设备进行操作,这话对吗?
答:错误。是指对I/O端口的操作,而不是对I/O设备的操作。即CPU所访问的是I/O设备相关的端口,而不是I/O设备本身。
5.在独立编址方式下,CPU采用什么指令来访问端口?
答: IN AL,PORT ;输入
OUT PORT,AL ;输出
6.什么是端口?答:端口(PORT)是接口电路中能被CPU直接访问的寄存器的地址。
四、编程题
1.用80286以上指令实现32位无符号数的乘法运算。两个乘法操作数分别放在VAR1和VAR2地址内,运算后的结果,则放在RESULT地址内。
.MODEL SMALL
.486
.STACK
.DATA
VAR1 DD 12121212H
VAR2 DD 34343434H
RESULT DD 2 DUP(0)
.CODE
.STARTUP
MOV EAX,VAR1
MUL VAR2
MOV RESULT,EAX
MOV RESULT+4,EDX
.EXIT 0
END
`00第一章课外练习题
一、单项选择题:
1.从键盘输入的字符,在计算机内存储的是它的( A )
(A)二进制编码 (B)四进制编码 (C)八进制编码(D)十六进制编码
2.6位无符号二进制数能表示的最大十进制数是( B )。
(A) 64 (B) 63 (C) 32 (D) 31
3.十进制数269变换为十六进制数是( C )。
(A)10B (B)10C (C)10D (D)10E
4.8位的微型计算机系统是以16位来表示地址,则该微机系统有( C )个地址空间。
(A)255 (B)65535 (C)65536 (D)1048576
5.8位有符号二进制数能表示的最大十进制数是( D )。
(A)256 (B)255 (C)128 (D)127
6.十六进制数88H,可表示成下面几种形式,请找出错误的表示( D )。
(A)无符号十进制数136 (B)带符号十进制数-120
(C)压缩型BCD十进制数88 (D)8位二进制数-8的补码表示
7.有一个数值152,它与十六进制数6A相等,那么该数值是( B )。
(A)二进制数 (B)八进制数 (C)十进制数 (D)四进制数
8.7位ASCII总共可表示( C )个符号。
(A)256 (B)127 (C)128 (D)255
9.4B的字长是( C )。
(A)8位 (B)16位 (C)32位 (D)64位
二、判断题(判断每题正误,对的在题后括号内划 “√”,错的划“×”)
1.字节通常用英文单词“Bit”来表示 (×)。
2.目前广泛使用的Pentium计算机其字长为5个字节 (×)。
3.存储器中将8个相邻的二进制位作为一个单位,这种单位称为字节 (√)。
4.微型计算机的字长并不一定是字节的整数倍 (×)。
三、填空题
1.8位有/无符号整数的表示范围写成16进制形式为(80~~7F) /( 00~~FF)。
2.己知:计算机中有一个“01100001”编码,如果把它看作是无符号数,它是十进制什么数(97);如果认为它是BCD,则表示(01100001)BCD;认为它是某个ASCII,则代表( a )字符。
3.若[X]补=X,则X为 ( 非负数)。
4.(00101011)B+(13)D+(1B)H=(123)Q
5.已知:A=10001011,B=11011010,求A∧B=(10001010);A∨B=(11011011)。
6.已知:X=+0010011B,Y= -0111100B,试用补码完成真值(X+Y)=( 11010111);(X - Y)=(01001111)。
7.十进制数的(731)=([1**********]1)BCD。
8.([1**********]1)BCD=(731)十进制数。
9.将一个0~9之间的数据转换为ASCII需加(30H)。
10.大写英文字母转换为小写英文字母需加(20H)。
11.英文字母“A”~“F”转换为十六进制数值A~F需要减(37H)。
四、简答题
1.什么是汇编语言?为什么要学习汇编语言?
答:汇编语言是机器语言的符号表示形式。它不仅是计算机原理、操作系统等课程的必要先修课,而且对于训练学生掌握计算机工作原理、程序设计技术、熟练上机操作和程序调试技术都有重要作用。
3.把下列二进制数转换成十进制数。
① 1101.01=13.25 ② 111001.00011=57.9375
③ 111.001=7.125 ④ 1010.1=10.5
5.把下列十六进制数转换成十进制数。
① A6.DC=166. ② 9AC.BD=2476.
③ B4A.8D=2890. ④ 1AC.0A=428.
6.把下列英文单词转换成ASCII编码的字符串。
① Water=5761746572 ② Great=4772656174
③ Good=476F6F64 ④ After=4166746572
7.回车键、空格键的ASCII代码及其功能是什么?答:0DH、20H。字符从头开始、空一个字符的位置。
第二章课外练习题
一、单项选择题:
1.下列四个寄存器中,哪个寄存器在程序设计中是不可省略的( A )。
(A)CS (B)DS (C)ES (D)SS
2.指令MOV AX, 10[SI]的源操作数字段的寻址方式是( C )。
(A)寄存器寻址 (B)寄存器间址 (C)变址寻址 (D)基址寻址
3.8086∕8088 CPU中可用作寄存器间址的寄存器是( B )。
(A)BX、SI、DI (B)BX、BP、SI、DI
(C)BX、IP、SI、DI (D)BX,DX,SI,DI
4.指令MOV 100[SI][BP],AX 目标操作数的隐含段为( B )。
(A)数据段 (B)堆栈段 (C)代码段 (D)附加段
第二章课外练习题
一、单项选择题:
1.下列四个寄存器中,哪个寄存器在程序设计中是不可省略的( A )。
(A)CS (B)DS (C)ES (D)SS
2.指令MOV AX, 10[SI]的源操作数字段的寻址方式是( C )。
(A)寄存器寻址 (B)寄存器间址 (C)变址寻址 (D)基址寻址
3.8086∕8088 CPU中可用作寄存器间址的寄存器是( B )。
(A)BX、SI、DI (B)BX、BP、SI、DI
(C)BX、IP、SI、DI (D)BX,DX,SI,DI
4.指令MOV 100[SI][BP],AX 目标操作数的隐含段为( B )。
(A)数据段 (B)堆栈段 (C)代码段 (D)附加段
二、判断题(判断每题正误,对的在题后括号内划 “√”,错的划“×”)
1. 当SP, BP, SI,DI用于指针和变址寄存器使用时;
① SP中所含的偏移地址是堆栈段中的偏移地址。 ( √ )
② BP、SI、DI所含的偏移地址是数据段中的偏移地址。 ( × )
2. 奇偶标志位PF,当运算结果的低8位中有偶数个1时,被置为0。 ( × )
3. 零标志位ZF,当运算结果为0时,被置为0。 ( × )
4. 符号标志位SF,在运算结果为负时被置为1。 ( √ )
三、填空题
1.在8086/8088CPU中,有许多寄存器,他们是通用寄存器:( AX )( BX )( CX )( DX );指针和变址寄存器:( SP )( BP )( SI )( DI );段寄存器:( CS )( DS )( SS )( ES );指令指针:( IP )还有一个标志寄存器:( PSW ),他们都是( 16 )位的。
2.IBM PC机内存容量最大为( 1M )B,要寻找这样大的空间,需要( 20 )根地址线。
3.每个逻辑段的最大长度为( 64KB )。
4.在IBM PC机中,有4个专门存放段地址的寄存器,称为段寄存器,请写出以下段寄存器的符号:
代码段寄存器:( CS ) 数据段寄存器:( DS )
堆栈段寄存器:( SS ) 附加段寄存器:( ES )
四、简答题
1.IBM PC 的存储器为什么采用分段结构?
答:是因为要寻找20位存储器地址的需要。使用两个十六进制的寄存器做一个寻找20位寄存器工作的一种方法。
2.什么是逻辑地址?什么是物理地址?如何由逻辑地址计算物理地址?
答:逻辑地址是由两部分组成的,即段的基地址和偏移地址。程序员在编写程序时使用的都是逻辑地址。物理地址就是内存单元中的一个惟一的20位二进制数表示的地址,物理地址的范围是从00000H到FFFFFH。CPU与存储器进行数据交换时所使用的地址就是物理地址。
物理地址=段地址×16D+偏移地址。
3.如果在一个程序段开始执行之前,CS=0A7F0H,IP=2B40H,试问该程序段的第一个字的物理地址是多少?答:物理地址=段地址×16D+偏移地址=0A7F0H×16D+2B40H=0AAA00H
4.一个有16个字的数据区,它的起始地址为70A0:DDF6,那么该数据区的最后一个字单元地址是多少?
答:=DDF6H+20H-2H(16个字=32个字节=20H个字节)=DE14即70A0::DE14
5.哪些寄存器可以用来指示存储器地址?答:BX、BP、SI和DI。
6.有一个由20个字组成的存储区,其起始处段地址为4701H,偏移地址为2012H。试写出该存储区首单元和末单元的物理地址。答:该存储区末单元的偏移地址=2012H+28H-2(20个字=40个字节=28H个字节)=2038H。即首单元和末单元的物理地址为49022H和49048H。
7.8086微处理器由哪几部分组成?各部分的功能是什么?
答:8086/8088微处理器由两大部分组成:总线接口单元 BIU和执行单元 EU。
①BIU:负责与存储器接口,即CPU与存储器之间的信息传送。即:
BIU从内存的指定部分取出指令,送至指令队列排队。
从内存的指定部分取出执行指令时所需的操作数,送至EU部分。
②EU:负责指令的执行。
8.简述8086 CPU的寄存器组织。
答:8086/8088CPU的寄存器是由①通用寄存器②控制寄存器③段寄存器组成。
9.试述8086 CPU标志寄存器各位的含义与作用。
答:它含有9个有用的标志位(其余7位不用),用于记录指令操作后的结果状态信息或控制处理器操作的标志。其含义与作用如下:
进位标志C(Carry Flag)——当加减运算操作后,结果的最高位产生一个进位或借位,则C=1,否则C=0。各种移位指令,逻辑操作指令等也可影响CF的状态。CF位也可表示无符号数的溢出。
溢出标志O(Overflow Flag)——在算术运算中,带符号数的运算结果超出机器所能表示的数据范围称为溢出,当溢出发生时,则O=1,否则O=0。
带符号数的数据范围。8位运算时为:﹣128 ~ +127;16位:﹣32768 ~ +32767。
符号标志S(Sign Flag)——若运算结果的最高位(D15或D7)为1,则S=1,否则 S=0。 零标志Z(Zero Flag)——若运算的结果为0,则Z=1,否则Z=0。
奇偶标志P(Parity Flag)—— 若运算结果中‘1’的个数为偶数,则P=1,否则P=0。
辅助进位标志A(Auxitiary Carry Flag)——记录运算时第3位(半个字节)产生的进位值,若第3位产生进位,则A=1,否则A=0。在执行BCD调整时使用此标志。
方向标志DF(Direction Flag)——用于在串处理指令中控制处理信息的方向。当DF=1时,每次操作后使变址寄存器SI和DI减小,这样就使得串处理操作从高地址向低地址方向处理。当DF=0时,则使SI和DI增大,使得串处理从低地址向高地址方向处理。
中断标志IF(Interrupt Flag)——当IF=1时,允许CPU响应可屏蔽中断请求,否则关闭中断。 陷阱标志TF(Trap Flag) ——又称单步跟踪。用于调试时的单步方式操作。当TF=1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF=0时,CPU正常工作,不产生陷阱。
10.指出下列MOV指令的源操作数的寻址方式。
MOV AX,1234H =立即
MOV AX,BX =寄存器
MOV AX,[BX] =寄存器间接
MOV AX,TABLE ;TABLE是一个变量名 =直接
MOV AX,[1234H] =直接
MOV AX,[BX+1234H] =基址
MOV AX,[BP][SI] =基址变址
MOV AX,[BX+SI-1234H] =基址变址
11.设(DS)=2000H,(BX)=0100H,(SS)=1000H,(BP)=0010H,TABLE的物理地址为2000AH,(SI)=0002H。求下列每条指令源操作数的存储单元地址。
=21234H MOV AX,[1234H]
=20100H MOV AX,[BX]
MOV AX,TABLE[BX] =2010AH
=10010H MOV AX,[BP]
=10012H MOV AX,[BP][SI]
12.已知:BX=1234H,BP=5678H,SI=1357H,DS=0925H,SS=0468H,CS=4B10H,指出下述
13.有两个16位字1EE5H和2A3CH分别存放在80x86微机存储器的000B0H和000B3H单元中。请用图表示出它们在存储器里的存放情况。
地址 000B0H 000B1H 000B2H 000B3H 000B4H 14.有关寄存器及存储单元的内容如下:
DS=2000H,BX=0100H,SI=0002H,存储单元的内容见习题14示意图。试说
明下列各条指令执行后AX寄存器的内容。
=1200H ①MOV AX,1200H
=0100H ②MOV AX,BX
=4C2AH ③MOV AX,[1200H]
=3412H ④MOV AX,[BX]
=4C2AH ⑤MOV AX,1100[BX]
=7856H ⑥MOV AX,[BX][SI]
=65B7H ⑦MOV AX,1100[BX][SI]
习题14示意图
第三章课外练习题
一、单项选择题:
1.以下语句汇编后,CENTH的值是( A )。
BUF1 DW 8,19
BUF2 DB 6,'ABC$',10 DUP('5')
CENTH EQU BUF2—BUF1
(A)4 (B)8 (C)14 (D)17
2.在DEBUG环境下查看机器指令使用( B )命令;显示内存数据使用( E )命令。
(A)G (B)U (C)T (D)A (E)D (F)E (G)R
二、填空题:
1.写出下列各语句在存储器中分别为变量分配多少字节,并填入括号内。
DATA SEGMENT
NUM1 DW 20 ( 2 )
NUM2 DB ‘31H,32H,33H’ ( 11 )
NUM3 EQU 10H ( 0 )
NUM4 DB NUM3 DUP(0) ( 10H )
DATA ENDS
2.某程序的数据段定义如下:
DATASG SEGMENT
PARTLIST DB‘PART#’
DB 60
DB ‘PRICE’
DB 0125
DB ‘DESCRIPTION’
DB ‘RADIO’
LISTLENG EQU ($-PARTLIST) ;数组长度,用表达式表示
DATASG ENDS
3.有符号定义语句如下:
BUFF DB 1,2,3,‘123’
EBUFF DB 0
L EQU EBUFF - BUFF
问L的值是( 6 )。
4.下边是汇编语言程序上机步骤,请填写出完成各步骤使用的系统程序的文件名字,并按照正确步骤给出操作顺序号。
操作名称 文件名 操作顺序
汇编 ( MASM ) ( 2 )
编辑 ( EDIT ) ( 1 )
连接 ( LINK ) ( 3 )
调试 ( DEBUG ) ( 4 )
5.自内存0F00:0006开始的内存单元中存放着80 32 56 98 76 B5这六个十六进制数据,试分别写出0F00:0008的字节型数据,字型数据、双字型数据的值。
字节型: ( 56 )
字型: ( 9856 )
双字型: ( B5769856 )
6.对于如下所示的数据定义,各指令语句的执行结果是什么(以十六进制数表示)?
VR1 DB -38,'456',?
VR2 DW 6,5 DUP(2)
① MOV AL, VR1 ( -38 )
② ADD VR2,59 ( 65 )
③ MOV BL,VR1+2 ( 53 )
7.对于第6小题,为VR1变量分配了( 5 )个字节,为VR2变量分配了( 12 )个字节。
8.汇编源程序的文件扩展名是( . ASM )。
9.以下语句汇编后,COUNT的值是( 9 )。
BUF1 DB 3,5,'ABCD$'
BUF2 DW 0FABH
COUNT EQU $-BUF1
10.保存当前栈顶地址的寄存器是( SP )。
11.在程序运行时执行的语句是( 指令 )语句,它告诉CPU要执行的操作。
12.( 伪指令 )语句是由汇编程序在汇编过程中执行的语句。
三、判断题(判断每题正误,正确的在题后括号内划 “√”,错误的划“×”)
1.汇编语言是用指令的助记符、符号地址、标号等符号书写程序的语言。 (√)
2.通过ASSUME伪指令给段寄存器赋初值。 (×)
3.在汇编语言中当缺省为十进制数时,表示十六进制数要用H结尾。 (√)
4.在DEBUG中,缺省值为十进制数。 (×)
5.在标志IF=0时,CPU忽略所有的中断请求。 (√)
四、简答
1.标号具有哪3种属性?该3种属性的属性值分别表示什么?
答:标号具有三种属性:段、偏移和类型属性。
①段属性:定义标号的段起始地址,此值必须在一个段寄存器中,而标号的段则总是在CS寄存器中。段属性值可以用SEG算符求得。
②偏移属性:标号的偏移地址是从段起始地址到定义标号的位置之间的字节数。标号偏移量属性值可由OFFSET算符求得。
③类型属性:类型属性用来指出该标号是在本段内引用还是在其他段中引用的。标号类型值可用TYPE算符求得。
第四章课外练习题
一、单项选择题:
1.若栈顶的物理地址为20100H,当执行完指令PUSH AX后,栈顶的物理地址为( D )。
(A)20102H (B)20101H (C)200FFH (D)200FEH
2.下列指令执行后,DAB中第一个字的内容是(B)。
DAB DB 0FAH,0DAH,0F5H,0D0H,5H
DAB_L EQU $-DAB
┆
MOV AL,DAB_L
XCHG DAB,AL
(A) 05DAH (B) 0DA05H (C) 0F5DAH (D) 0DAF5H
3.执行下列指令后,正确的结果是(B)。
MOV AL, 100
MOV BL, -2
(A)AL=100H,BL=02H (B)AL=64H,BL=0FEH
(C)AL=64H,BL=82H (D)AL=100H,BL=0FEH
4.完成同指令XCHG AX,BX相同功能的指令或指令序列是(D)。
(A)MOV AX,BX (B) MOV BX,AX
(C)PUSH AX (D) MOV CX,AX
POP BX MOV AX,BX
MOV BX,CX
5.为了使MOV AX,VAR指令执行后,AX寄存器中的内容为4142H,下面哪一条数据定义会产生不正确的结果?(C)
(A)VAR DW 4142H (B) VAR DW 16706
(C)VAR DB 42H,41H (D) VAR DW ‘AB’
6.假定用伪指令DATA DB 12H,34H定义了两个字节数据,现需要将数据12H取入寄存器AL,将数据34H取入寄存器AH,能完成此功能的程序段是(D)。
(A) MOV AX,DATA (B) MOV SI,DATA
MOV AX,[SI]
(C) LEA SI,DATA (D) MOV SI,OFFSET DATA
MOV AX,[SI] MOV AL,[SI]
MOV AH,[SI] MOV AH,[SI+1]
7.POP指令的操作数不能是( D )。
(A)BP (B)[BX] (C)字变量的SUM (D)CS
二、简答题
1.设ARRAY是字数组的首地址,写出将第5个字元素取出送AX寄存器的指令序列,要求使用以下几种寻址方式:
①直接寻址; (MOV AX,ARRAY+8)
②寄存器间接寻址; (LEA BX,ARRAY+8和MOV AX,[BX])
③变址寻址; (MOV SI,8和MOV AX,ARRAY[SI])
④基址变址寻址。 (LEA BX,ARRAY及MOV SI,8和MOV AX,[BX][SI])
2.设有以下程序段,求执行完此程序段后AL寄存器中的内容。(12H)
ABC EQU 2
DATA1 DB 20H
DATA2 DW 1234H
┆
MOV AL,DATA1+ABC
3.下列每组指令有何区别?
① MOV AX,1234H AX←1234H
MOV AX,[1234H] AX←1234H的地址
② MOV AX,TABLE AX←TABLE的数据
MOV AX,[TABLE] AX←TABLE的数据
③ MOV AX,TABLE AX←TABLE的数据
LEA AX,TALBE AX←TABLE的地址
④ MOV AX,BX AX←BX的内容
MOV AX,[BX] AX←BX的地址里的内容
4.写一指令序列,将3456H装入DS寄存器。
MOV AX,3456H
MOV DS,AX
5.不可以从堆栈向哪个段寄存器弹出数据?答:CS
6.若(SS)=2000H,(SP)=000AH,先执行将字数据1234H和5678H压入堆栈的操作,再执
SP
。
执行前SP 执行后SP 最后SP
7.在8086∕8088微处理器中,PUSH和POP指令在堆栈与寄存器或存储单元之间传送数据时,一次总是传送多少字节?答:2字节。
8.解释XLAT指令是怎样转换AL寄存器中的内容的。并编写一段程序用XLAT指令将BCD码的0~9转换成对应的ASCII,并将ASCII存入数组ARRAY中。
答:XLAT指令是通过AL寄存器加上BX寄存器联合组成的寻址方式找到目标地址后,将内容传送到AL寄存器中。程序如下:
.MODEL SMALL
.STACK
.DATA
BCD DB -7
BCD2ASCTAB DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
ARRAY DB ?
.CODE
.STARTUP
MOV AL,BCD
LEA BX,BCD2ASCTAB
XLAT
MOV ARRAY,AL
.EXIT 0
END
9.下列ASCII字符串(包括空格符)依次存储在首地址为CSTRING的字节单元中: CSTRING DB ‘BASED ADDRESSING’
请编写指令将字符串中的第一个和第七个字符传送给DX寄存器。
MOV DL,CSTRING
MOV DH,CSTRING+6
10.请编写指令将BX寄存器初始化为变量MYDAT的偏移地址。
MOV BX,OFFSET MYDAT或LEA BX,MYDAT
11.将变量名TABL的段地址送AX的指令是什么?
MOV AX,SEG TABL
12.设MEM是数据段中0A00H单元的符号名,其中存放的内容为0B0CH,以下各指令语句的执行结果是什么?
①MOV AX,MEM 答: 0B0CH
②LEA BX,MEM 0A00H
三、程序分析题
1. A DW 1234H
B DW 5678H
┆
PUSH A
PUSH B
POP A
POP B
试回答:
①上述程序段执行后(A)=5678H,(B)=1234H
②执行前SP=200H,执行后SP=200H
四、判断题(判断每题正误,对的在题后括号内划 “√”,错的划“×”)
1.MOV ES,BX (√)。
2.MOV CS,BX (×)。
3.IN AL,DX (√)。
4.POPF AX (×)。
5.POP 1234 (×)。
6.PUSH A(A为字节单元) (√)。
7.执行LEA BX,TABLE与执行MOV BX,OFFSET TABLE效果一样 (√)。
8.当执行LAHF和SHAF两条指令后,标志位不改变 (×)。
第五章课外练习题
一、单项选择题:
1.假定AX的内容为-32768,在执行了指令NEG AH后,标志位(SF,OF)为(D)。
(A)0,0 (B)0,1 (C)1,0 (D)1,1 2.已知AL,BX为带符号数,计算AL×BX的乘积,使用下述程序段(D)
(A) MOV AH,0
MUL BX
(B) MOV AH,-1
IMUL BX
(C) MOV AH,0
IMUL BX
(D) CBW CBW指令进行字节和字的混合运算 字节--→字
IMUL BX CWD------字-→双字
3.已知AL,BX为无符号数,计算AL×BX的乘积,使用下述程序段( C )
(A)MUL BX (B)IMUL BX (C) MOV AH,0(D)CBW
MUL BX MUL BX
无符号数不能用CBW
4.当执行指令ADD AX,BX后,若AX的内容为2BA0H,设置的奇偶标志位PF=1,下面的叙述正确的是(A)。
(A)表示结果中含1的个数为偶数 (B)表示结果中含1的个数为奇数 (C)表示该数为偶数 (D)表示结果中低八位含1的个数为偶数 5.设AH=0,AL=06H,BL=09H,执行下列两条指令之后,其结果应是(A)。
ADD AL,BL
AAA AL寄存器的低四位在A和F之间,或AF标志是1,加6调整,AH加1 (A)AH=01,AL=05 (B)AH=1, AL=15 (C)AH=0 ,AL=0FH (D)AH=0, AL=05
6.设AL=0B4H,BL=11H,指令“MUL BL”和指令“IMUL BL”分别执行后OF,CF的值为(B)。
(A)OF=1,CF=0 (B)OF=1,CF=1 (C)OF=0,CF=0 (D)OF=0,CF=1
7.当执行完下列两条指令后,标志位CF和SF的值为( D )。
MOV AL,0C4H ADD AL,9DH (A)0,0 (B)1,1 (C)0,1 (D)1,0
二、判断题(判断每题正误,对的在题后括号内划 “√”,错的划“×”)
1.ADD [SI], [BX] ( × ) 2.ADD AX, 100 ( √ ) 3.ADD AX, BL ( × ) 4.ADD [SI], 100 ( √ ) 5.ADD ES, BX ( √ ) 6.INC [BX] ( √ )
7.SUB BYTE PTR [SI],1 ( √ ) 8.DEC [BX],1 ( × )
三、指出下列指令中的错误,并写出与该条指令意义相近的所有可能的正确指令。
1.ADD BH, AX
(类型错误。改正:ADD BX,AX) 2.SUB 100H,AX
(立即数不可做目标操作数。改正:SUB AX,100H) 3.MOV DS, 100H
(立即数不可以直接向段寄存器送数。改正:MOV AX,100H和MOV DS,AX) 4.MOV [DI], [100H]
(两个操作数不可以同时是存储器中的数。改正:MOV AX,[100H]和MOV [DI],AX) 5.INC 100H
(立即数不可做目标操作数。改正:MOV AX,100H和INC AX) 6.MOV AL, ARRAY [BX][BP]
(没有此寻址方式。改正:MOV AL,ARRAY [BX][SI]) 7.ADD [BX],[SI]
(两个操作数不可以同时是存储器中的数。改正:MOV AX,[SI]和ADD [BX],AX) 四、填空题
1.当执行MUL BX指令后,乘积的高半部分在(DX)中,低半部分在(AX)中。
2.当执行DIV BX指令后,被除数在(DX,AX)中,所得商在(AX)中,余数在(DX)中。 3.已知AL, BL中数据为无符号数,若求AL∕BL的商,应使用指令序列为:
(MOV AH,0)和(DIV BL)。
4.已知AL, BL中数据为带符号数,若求AL∕BL的商,应使用指令序列为:
(CBW ) 和( IDIV )。
5.用一条语句实现AX的内容加1,要求不影响CF(INC AX )。
6.将AX的内容,减去0520H,和上次运算的借位,选用(SBB AX,0520H)指令。 7.在SUB AX,BX指令执行后,CF=1,说明:
①最高有效位(有借位)。
②对(无符号)数,操作结果溢出。
五、简答题
1.写一指令序列,完成将存于AX、BX中的压缩BCD数加到存于CX、DX中的8位BCD数上的操作。
PUSH AX
MOV AL,BL ADD AL,DL DAA
MOV DL,AL MOV AL,BH ADC AL,DH DAA
MOV DH,AL POP BX
MOV ADC DAA MOV MOV ADC DAA MOV
AL,BL AL,CL CL,AL AL,BH AL,CH CH,AL
第六章课外练习题
一、单项选择题:
1.JMP SI的目标地址偏移量为( A )。
(A)SI的内容 (B)SI所指向的内存字单元之内容 (C)SI+IP的内容 (D)IP+ [SI] 2.JMP WORD PTR [BX]转移的目标地址是( D )。
(A)BX的内容 (B)SP+BX之和 (C)IP+ [BX]之和 (D)BX指出的内存单元之内容 3.当A≥B时转移的条件转移指令为(A,B为带符号数)( D )。
(A)JA (B)JAE (C)JG (D)JGE
4.已知X,Y为带符号数,两个数比较后,欲判断X≤Y发生转移,应使用( C )指令。
(A)JBE (B)JL (C)JNG (D)JNA
5.假定AX和BX寄存器中存放的是有符号整数,如果AX>BX则转移到LABEL,应采用下面哪一条指令序列?( D )。
(A) SUB AX,BX (B) SUB AX, BX
JC LABEL JNC LABEL
(C) CMP AX, BX (D) CMP AX, BX
JA LABEL JG LABEL
6.已知AX=8078H, BX=5610H,指令CMP BL,AH执行后OF,CF的值为( D )
(A)0,0 (B)0,1 (C)1,0 (D)1,1 7.在汇编下列条件转移指令中,两条指令功能不一样的是( D )。
(A)JZ 与JE (B)JC与JB (C)JA与JNBE (D)JP与JS 8.循环指令LOOPNZ终止循环的条件是( B )。
(A)CX=0,且ZF=0 (B)CX=0, 或ZF=1 (C)CX0,且ZF=0 (D)CX0, 或ZF=1
9.在循环次数已知的情况下,采用哪种方法控制循环程序最方便( A )。
(A)计数法 (B)条件控制法
10.循环控制指令隐含指定哪个寄存器作为循环计数器( B )。
(A)CL (B)CX (C)AL (D)AX
二、判断题(判断每题正误,对的在题后括号内划 “√”,错的划“×”):
1.两个数相等时进行转移可用JZ指令 ( √ ) 2.当PF=1时发生转移的条件转移指令为JPO ( × ) 3.当X
1.当两个数不相等时,发生转移的条件转移指令有JNE和( JNZ )。 2.当PF=0时,发生转移的条件转移指令为JNP和( JPO )。
3.当A≥B(A,B为无符号数)时,发生转移的条件转移指令有( JAE )( JNB )。
4.设有下列程序段: ADD AX, BX JNO L1 JNC L2 SUB AX, BX JNC L3 JNO L4 JMP SHORT L5
如果AX和BX的内容如习题4图形,则该程序分别执行后,程序转向哪里? 四、程序分析题
1.阅读如下程序,回答所提出的问题,假定X1,X2,...Xn为无符号数。 .MODEL SMALL .STACK .DATA
BLOK DW X1,X2,..,Xn COUNT EQU ($-BLOK)/2 RESULT DW COUNT,?
.CODE .STARTUP
LEA BX,BLOK-2 MOV CX,RESULT XOR AX,AX
GOON:
ADD BX,2 CMP AX,[BX] JAE NEXT MOV AX,[BX]
NEXT:
LOOP GOON
MOV RESULT+2,AX
.EXIT 0 END
程序执行完,回答下述问题:
RESULT+2字存储单元的内容=MAX(X1,X2,..,Xn) 程序循环次数=( COUNT ) [BX]=( Xn )
2.下列程序完成的是什么功能?(SUMn=|BUF1n|+|BUF2n|。两个数组BUF1和BUF2对应位绝对值之和存入SUM对应位)
LEA SI, BUF1 LEA BX, BUF2 LEA DI, SUM MOV CX, 100
AGAIN:
MOV CMP JGE NEG
K1:
MOV CMP JGE NEG
K2:
ADD AX, DX MOV [DI], AX ADD SI, 2 ADD DI, 2 ADD BX, 2 LOOP AGAIN
3.下列程序完成的是什么功能?(DATX1数组中后100个数送DATX2数组中) DATX1 DB 300 DUP(?) DATX2 DB 100 DUP(?)
┆
MOV SI,0 MOV DI,0 MOV BX,200 MOV CX,100
NEXT:
MOV AL,DATX1 [BX][SI] MOV DATX2 [DI],AL INC SI INC DI LOOP NEXT
4.假设X和X+2单元的内容为双字数据P,Y和Y+2单元的内容为双字数据Q(X单元与Y单元为低位字),说明下列程序段完成什么工作?()
MOV DX, X+2
MOV AX, X
ADD AX, X
ADC DX, X+2
CMP DX, Y+2
JL L2
JG L1 CMP AX, Y JBE
L2
AX,
AX, K1 AX DX, BX, K2 BX
[SI] 0
[BX] 0
MOV AX, 1 HLT
L2: MOV AX, 2
HLT
5.指出以下程序执行后ANS的内容是什么?(在三个带符号数中求最大数。即ANS=1240H) L1:
DSEG SEGMENT
D1 DW 9CC0H D2 DW 1240H D3 DW 0620H ANS DW ?
DSEG ENDS
CSEG SEGMENT
ASSUME DS:DSEG,CS:CSEG
START:
MOV AX,DSEG MOV DS,AX MOV AX,D1 CMP AX,D2 JG CMP13 MOV AX,D2 CMP AX,D3 JG OK
D3G: MOV AX,D3
JMP OK
CMP13: CMP AX,D3
JL D3G
OK: MOV ANS,AX
MOV AH,4CH INT 21H
CSEG ENDS
END START
6.下述程序段运行后,S9开始的10个字节存储单元内容是什么?(9,8)
DATA SEGMENT
S9 DB 0,1,2,3,4,5,6,7,8,9 DATA ENDS
┆
LEA SI,S9 LEA DI,S9+1 MOV CX,5
LOP: MOV AL,[SI]
XCHG AL,[DI]
1,0,3,2,5,4,7,6,
MOV [SI],AL ADD SI,2 ADD DI,2 DEC CX JNZ LOP
7.指出下列程序段执行后AL内容是什么?
① ┆(60H) MOV AL, 60H CMP AL, 0BBH JB L2 L1:MOV AL, 0BBH L2:NOP ;NOP为空操作
② ┆(61H) MOV AL, 60H CMP AL, 0BBH JL L2 L1:INC AL L2:NOP ;NOP为空操作 ④ ┆(0) XOR AL, AL
MOV BL, 98H ADD BL, 88H JNO L2
L1:MOV AL, 0 L2:NOP ;NOP为空操作
③ ┆(0FFH)
XOR AL, AL
MOV BL, 98H ADD BL, 88H JNC L2 L1:DEC AL L2:NOP ;NOP为空操作
8.指令序列为: CMP AX, BX JX L1
请在能引起转移到L1单元的条件转移指令下面划“√”,
五、编程题
1.将AX寄存器中的16位数分成4组,每组4位,然后把这4组数分别放在AL、BL、CL和DL中的最低4位。
MOV CL,4 MOV DL,AL AND DL,0FH MOV BL,AH AND BL,0FH ROL AX,CL
AND AL,0FH MOV CL,AH AND CL,0FH
2.将BUF有符号双字节数据区中的最大数及最小数分别送MAX及MIN存储单元。 .数据段
BUF DW 1010H,2030H,19H,5555H,3435H,0FFFFH COUNT EQU ($-BUF)/2 MAX DW ? MIN DW ? .代码段
MOV CX, COUNT DEC CX
OUTLP: MOV DX,CX
LEA BX,BUF
INLP: MOV AX,[BX]
CMP AX,[BX+2] JL NEXT
XCHG AX,[BX+2] MOV [BX],AX
NEXT: ADD BX,2
DEC DX JNZ INLP LOOP OUTLP
MOV AX,BUF[0]
MOV BX,BUF[COUNT+COUNT-2] MOV MIN,AX MOV MAX,BX
3.已知一多字节数据存放在内存DATA开始的连续单元中,数据长度在LEN单元,编制程序计算其绝对值并存入原单元。
MOV SI,0
MOV CX,LEN
MOV AL,DATA[LEN-1] CMP AL,0 JGE QUIT0 CLC
AGAIN:
MOV AL,0 SBB AL,DATA[SI] MOV DATA[SI],AL INC SI
LOOP AGAIN QUIT0: NOP
4.编制程序,将一个包含有20个数据的数组M分成两个数组:正数组P和负数组N。
MOV BX,0 MOV SI,0 MOV DI,0 MOV CX,20
AGAIN:MOV AL,M[BX]
CMP AL,0 JL FS
MOV P[DI],AL INC DI JMP OK
FS: MOV N[SI],AL
INC SI
OK: INC BX
LOOP AGAIN
5.在首地址为DATA的数组中,存放了100H个16位补码数。求出它们的平均值放在AX寄存器中,并求出数组中有多少个数小于此平均值,将结果放在BX寄存器中。
MOV AX,0 MOV SI,0 MOV CX,100
AGAIN:ADD AX,DATA[SI]
ADD SI,2 LOOP AGAIN MOV DX,0 MOV CX,100 IDIV CX ;AX为平均数 MOV BX,0 MOV SI,0 MOV CX,100
AGA: CMP AX,DATA[SI]
JGE NEXT INC BX ;BX为小于AX的个数
NEXT: ADD SI,2
LOOP AGAIN1
6.编写程序,求出首地址为DATA的100字无符号数组中的最小偶数,并把它存放AX中。
MOV AX,0FFFFH ;假设FFFFH是本数组中的最小偶数 MOV SI,0 MOV CX,100
AGAIN:MOV BX,DATA[SI]
TEST BX,1 JNZ NEXT CMP AX,BX
JB
MOV
NEXT: ADD
LOOP NEXT AX,BX SI,2 AGAIN
7.设有一段英文,其字符变量名为ENG,试编写一个程序,查对单词READ在该文中出现次数并存放在BX寄存器中。
.MODEL SMALL
.STACK
.DATA
ENG DB 'SNNREADRAREADUNSUN'
CNTENG EQU $-ENG
KEYWORD DB 'READ'
CNTKEY EQU $-KEYWORD
.CODE
.STARTUP
PUSH DS
POP ES
XOR AL,AL
LEA BX,ENG
MOV DX,CNTENG
SUB DX,CNTKEY
INC DX
CLD
AGAIN: MOV DI,BX
LEA SI,KEYWORD
MOV CX,CNTKEY
REPZ CMPSB
JNZ LOP1
INC AL
LOP1: INC BX
DEC DX
JNZ AGAIN
.EXIT 0
END
8.测试AL寄存器的最低位是否为0,若为0,跳转到B1,否则,跳转到B2。
TEST AL,1
JZ B1
JMP B2
9.比较两个字符串STARING1和STARING2所含字符是否完全相同,若相同则显示“MATCH”,不同则显示“NO MATCH”。
.MODEL SMALL
.STACK
.DATA
NO_MA DB ‘NO_MATCH’,0DH,0AH,’$’
MAT DB ‘MATCH’,0DH,0AH,’$’
.CODE
.STARTUP
MOV SI,0
MOV DI,0
MOV CX,COUNT
AGAIN:MOV AL,STRING1[SI]
CMP AL,STRING2[DI]
JZ MA
MOV DX,OFFSET NO_MA
MOV AH,9
INT 21H
JMP OK
MA: INC SI
INC DI
LOOP AGAIN
MOV DX,OFFSET MAT
MOV AH,9
INT 21H
OK:
.EXIT 0
END
10.设在变量单元A、B和C中存放有三个数, 若三个数都不为0,
0,则将其他两个单元也清零,请编写此程序。
MOV AX,A
CMP AX,0H
JZ NEXT
MOV BX,B
CMP BX,0H
JZ NEXT
MOV CX,C
CMP CX,0H
JZ NEXT
ADD D,AX
ADD D,BX
ADD D,CX
JMP OK
NEXT: MOV A,0
MOV B,0
MOV C,0
OK: NOP
11.设变量X为带符号整数,试按下面的要求编制此程序:
①如果X的绝对值大于5,变量FX赋值为零。
②如果X的绝对值不大于5,变量FX赋值为1—X 则求出三个数之和存入D
中;若有一个为
MOV FX,0
MOV AX,X
CMP AX,0H
JG NEXT
NEG AX
NEXT: CMP AX,5
JA OK
NEG AX
ADD AX,1
MOV FX,AX
OK: NOP
12.编制程序计算(见下图):
设X,Y为双字节带符号数据,分别存放在DAX,DAY单元,计算结果存入RLT单元。
X×Y (Y>0,X>0)
S= X÷Y (Y
|X+Y| (其它)
MOV AX,DAX
MOV BX,DAY
CMP AX,0H
JL NEXT
CMP BX,0H
JL QT
IMUL BX
JMP OK
NEXT: CMP BX,0
JGE QT
MOV DX,0
IDIV BX
JMP OK
QT: ADD AX,BX
JNS OK
NEG AX
OK: MOV RLT,AX
第七章课外练习题
一、单项选择题:
1.完成将累加器AL清零,并使进位标志CF清零,下面错误的指令是(A )。
(A)MOV AL,00H (B)AND AL,00H
(C)XOR AL,AL (D)SUB AL,AL
2.下列指令执行后总是使CF=0,OF=0的是(A )。
(A)AND (B)NEG (C)NOT (D)INC
3.若(AX)=10101101B,为了使其内容变为01010010B,下列(A)指令执行一次即可完成此操作?
(A)NOT指令 (B)OR指令 (C)AND指令 (D)XOR指令
4.实现将DX:AX中存放的32位数扩大四倍,正确的程序段是(C )。
(A)SHL AX,2 (B) RCL AX,2
ROL DX,2 SHL DX,2
(C)MOV CX,2 (D) SHL AX,1
LOP: SHL AX,1 SHL AX,1
RCL DX,1 RCL DX,1
LOOP LOP RCL DX,1
5. TA1 DW 0102H,0304H,0506H
TA2 DB 02H,04H,06H
┆
MOV BX, OFFSET TA1
ADD BL, TA2+2
MOV BX, [BX]
AND BX, 0FFH
ADD BH, BYTE PTR TA1 [BX]
上述指令序列运行后,BX的内容是(B)。
(A)0605H (B)0402H (C)0606H (D)0204H
6.NEXT是某指令语句标号,下述哪个程序段不能实现转移到NEXT语句执行(C )。
(A) JMP NEXT (B) MOV BX, OFFSET NEXT
JMP BX
(C) MOV BX, NEXT (D) LEA AX, NEXT
JMP BX JMP AX
7.测试BL内容是否与数据4FH相等,若相等则转NEXT处执行,可实现的是(D )。
(A) TEST BL,4FH (B) OR BL,4FH
JZ NEXT JZ NEXT
(C) AND BL,4FH (D) XOR BL,4FH
JZ NEXT JZ NEXT
8.下面指令序列测试BH中的数是否为奇数,若为奇数则转移至K1处,括号处的指令应为(A )。
TEST BH,01H
( ) K1
(A)JNE (B)JZ (C)JS (D)JC
9.下面指令序列测试BX中的数是否为负数,若为负数则转移至F1处,不正确的指令序列应为
(C )。
(A) TEST BX,8000H (B) AND BX,BX
JNZ F1 JS F1
(C) CMP BX,0H (D) SUB BX,0H
JNS F1 JL F1
10.编写分支程序,在进行条件判断前,可用指令构成条件,下列指令中不能形成条件的指令是
(D )。
(A)CMP (B)SUB (C)AND (D)MOV
11.为使CX= -1时,转至MINUS而编制了一指令序列,其中错误的序列是(D)。
(A) INC CX (B) SUB CX,0FFFFH
JZ MINUS JZ MINUS
(C) AND CX,0FFFFH (D) XOR CX,0FFFFH
JZ MINUS JZ MINUS
二、程序分析题
1. AND AL, AL
JZ BRCH1
RCR AL, 1
JZ BRCH2
RCL AL, 1
INC AL
JZ BRCH3
┆
上述程序运行后,请回答:
①当AL=( 0 )时,程序转向BRCH1;
②当AL=( 1 )时,程序转向BRCH2;
③当AL=( -1 )时,程序转向BRCH3。
2.现有下列程序段:
MOV AX,6540H
MOV DX,3210H
MOV CL,04
SHL DX,CL
MOV BL,AH
SHL AX,CL
SHR BL,CL
OR DL,BL
试问上述程序段运行后,(AX)=(5400H),(BL)=(06H)(DX)=(2106H)
3.分析下面程序段:
MOV AL,200
SAR AL,1
MOV BL,AL
MOV CL,2
SAR AL,CL
ADD AL,BL
试问程序段执行后(BL)=(0E4H),(AL)=(0DDH)
4.程序段如下:
BLK1 DB 46,84,34,-5,20,122,73
┆
MOV CX,7
LEA SI,BLK1
NEXT: MOV AL,[SI]
INC SI
TEST AL,81H
LOOPZ NEXT
MOV BL,[SI]
请回答程序段运行后:(AL)=(0FB)H,(BL)=(14)H
四、用最少的程序编写下列程序段:
1.编写完成下列功能的小程序段:
⑪ 将寄存器AL的第4,3位取反,其余位保持不变。
XOR AL, 00011000B
⑫ 将寄存器AL的第4,3位清零,其余位保持不变。
AND AL, 11100111B
⑬ 将寄存器AL的第4,3位置1,其余位保持不变。
OR AL, 00011000B
⑭ 将寄存器AL的第4,3位写入MEN单元中的第4,3位,其余位保持不变。
AND AL,00011000B
AND MEN,11100111B
OR MEN,AL
⑮ 将寄存器AL的第i位写入MEN单元的第i位,其余位保持不变,i值在CL中。
MOV BL, 1
SHL BL, CL
AND AL, BL
NOT BL
AND MEN, BL
OR MEN, AL
⑯ 将寄存器AL的第i+1,i位写入MEN单元的第i+1,i位,其余位保持不变,i值在CL中。
MOV BL, 3
SHL BL, CL
AND AL, BL
NOT BL
AND MEN, BL
OR MEN, AL
⑰ 如果寄存器AL的第6,5位为00,则将AH清0,否则置全1。
TEST AL, 01100000B
JZ L1
MOV AH,0FFH
JMP OK
L1: MOV AH,0
OK: NOP
⑱ 如果寄存器AL的第6,5位为01,则将AH清0,否则置全1。
AND AL,01100000B
CMP AL,00100000B
JZ L1
MOV AH,0FFH
JMP OK
L1: MOV AH,0
OK: NOP
⑲ 如果寄存器AL的第6,5位为10,则将AH清0,否则置全1。
AND AL,01100000B
CMP AL,01000000B
JZ L1
MOV AH,0FFH
JMP OK
L1: MOV AH,0
OK: NOP
⑳ 如果寄存器AL的第6,5位为11,则将AH清0,否则置全1。
AND AL,01100000B
CMP AL,01100000B
JZ L1
MOV AH,0FFH
JMP OK
L1: MOV AH,0
OK: NOP
⑴ 如果寄存器AL的数据为偶数,则将AH清0,否则置全1。
TEST AL, 1
JZ L1
MOV AH,0FFH
JMP OK
L1: MOV AH,0
OK: NOP
⑵ 如果寄存器AL的数据为正数,则将AH清0,否则置全1。
TEST AL, 80H
JZ L1
MOV AH,0FFH
JMP OK
L1: MOV AH,0
OK: NOP
2.不允许使用乘法指令来完成AX与12的乘法运算。
SHL AX, 1 ;将AX乘2(等于2倍)
MOV BX, AX ;预存一份AX在BX内
SHL AX, 1 ;将AX再乘2(等于4倍)
ADD AX, BX ;加上原有2倍(等于6倍)
SHL AX, 1 ;再乘2(等于12倍)
3.写一指令序列,将DX与AX中的双字左移三位。
MOV CX,3
LOP: SHL AX,1
RCL DX,1
LOOP LOP
4.内存单元MEMB存放着一个8位的数据,将它的高4位与低4位互换。
MOV CL, 4
ROL MEN, CL
5.将AL的第7位和第0位,第6位和第1位,第5位和2第位,第4位和第3位互换。
MOV CX,7
MOV BL,0
LOP: MOV AH,AL
AND AH,1
ADD BL,AH
SHR AL,1
SAL BL,1
LOOP LOP
ADD AL,BL
五、简答题
1.至少使用三种方法(提示:MUL、SHL和SHR指令)实现将DATA中的字节数据乘以64的指令序列。
① MOV AL,64
MUL DATA
② MOV CL,6
SHL DATA,CL
③ MOV AH,DATA
MOV AL,0
SHR AX,2
MOV DATA,AL
第九章课外练习题
一、单项选择题:
1.已知CALL BX执行前SP=100H,执行后SP的内容为( D )。
(A)100H (B)102H (C)98H (D)0FEH
2.已知SP=100H,指令RET(远返回)执行后SP的值为( B )。
(A)106H (B)104H (C)0FCH (D)0FAH
3.已知SUBR是一个属性NEAR的子程序,下述调用SUBR子程序的指令序列中,哪一个不能实现调用SUBR的目的( C )。
(A)CALL SUBR (B)CALL NEAR PTR SUBR
(C)MOV BX,OFFSET SUBR (D)MOV BX,OFFSET SUBR
CALL NEAR PTR [BX] CALL BX
4.下面是将某存储区清0的宏定义,如将BUFF开始的100个存储单元清0,则其宏调用格式为( C )。
CLEAR MACRO DIR,DST,CNT
DIR
LEA DI,DST
MOV CX,CNT
XOR AL,AL
REP STOSB
ENDM
(A)CLEAR BUFF,100 (B)CLEAR STD,BUFF,100
(C)CLEAR CLD,BUFF,100 (D)CLEAR BUFF,STD,100
5.宏指令库以( C )格式存放在磁盘上。
(A)可执行代码 (B)目标代码 (C)源代码
6.汇编程序使用( C )伪指令使重复块重复多次。
(A)LOOP (B)REPE (C)REPT (D)LOCAL
二、判断题(判断每题正误,对的在题后括号内划 “√”,错的划“×”)
1.CALL WORD PTR[SI] ( × )
2.CALL [BX] [SI] ( × )
3.CALL AX ( × )
4.CALL [BX] ( √ )
5.CALL NEAR PTR [SI] ( × )
6.CALL FAR PTR [SI+2] ( × )
7.宏的处理是在程序执行过程中处理的 ( × )
8.宏定义中的形式参数可以多于宏调用的实在参数 ( √ )
三、填空题
1.调用程序与子程序之间的参数传递方法有三种,即堆栈法(寄存器法)(存储单元)。
2.LOCAL用于说明局部标号的伪指令,它只允许在(宏程序中)使用,其位置必须在(第一条指令前)。
四、简答题
1.指出CALL指令与JMP指令的异同?
答:相同----都可以无条件跳转到目标地址。不同---CALL指令有返回,而JMP没有;CALL指令影响堆栈段的变化,而JMP不影响堆栈段。
3.段内调用和段间调用的异同点是什么?
答:段内调用是指在调用和返回过程中,转返地址不涉及CS的变化,只通过IP内容的变化实现控制的转返;而段间调用需要CS,由CS和IP的变化共同决定控制的转返。
4.主程序和子程序之间有哪几类参数传递方法?
答:主程序与子程序之间的参数传递方法有三种,即堆栈法、寄存器法和存储单元。
5.子程序说明文件由哪几个部分组成?并分别说明各组成部分的含义?
答:编写子程序的目的在于减少源程序中某些相同功能程序段的重复书写,以利于自己和他人编写程序时使用。一般包含下述几项内容:
(1)子程序名称:用子程序定义伪指令定义该子程序时的名字;
(2)子程序功能:用自然语言或数学语言等形式简单清楚地描述子程序完成的任务;
(3)入口参数:说明子程序要求有几个入口参数,这些参数表示的意义及存放位置;
(4)出口参数:说明子程序要求有几个输出参数(运行结果),这些参数表示的意义及存放位置;
(5)受影响的寄存器:说明子程序运行后,哪些寄存器的内容被破坏了,以便使用者在调用该子程序之前注意保护现场。
五、程序分析题
1.下述程序段运行后,AL=( 88H ),CL=( 80H )
MOV AL,38H
MOV BL,49H
CALL SUBO
INC AL
DEC CL
„
SUBO PROC
ADD AL,BL
MOV CL,AL
DAA
RET
SUBO ENDP
2.宏指令GOTO L,X,REL,Y(其中REL可以是Z,NZ,L,NL等)定义如下:
GOTO MACRO L,X,REL,Y
IFB
JMP L
①展开宏调用GOTO LOP,SUM,NZ,15
MOV AX,SUM
CMP AX,15
JNZ LOP
②该宏指令的功能。
②可以根据不同情况产生无条件转移指令或比较和条件转移指令。
六、填空完善程序
1.下面是计算S=X2+Y2的程序,其中平方值的计算是用直接查表法编写的SQ1子程序。设在DAX,DAY单元存放一个-9~+9的字节数据,在SQRTAB数据区中存放了0~9的平方值,将结果存入SQR单元。
.MODEL SMALL
.STACK
.DATA
DAX DB -7
DAY DB 4
SQRTAB DB 0,1,4,9,16,25,36,49,64,81
SQR DB ?
.CODE
.STARTUP
MOV AL,DAX
CALL SQ1
MOV CL,AL
( MOV AL,DAY )
CALL SQ1
ADD CL,AL
( MOV SQR,AL )
.EXIT 0
SQ1 PROC NEAR
( TEST AL,80H )
JZ K1
NEG AL
K1: LEA BX,SQRTAB
( XLAT )
RET
SQ1 ENDP
END
ELSE MOV CMP J&REL ENDIF ENDM 回答下列问题: ①宏展开: 1 1 1 AX,X AX,Y L
2.请根据下面子程序的说明文件填充其中的空白。子程序的说明文件如下:
子程序名称:AVER
子程序功能:求一组带符号数据的平均值
入口参数:数据的首地址在DS:SI中存放,数据个数存放在CL中
出口参数:AL=数据的平均值
AVER PROC
PUSH SI
PUSH CX
XOR BX,BX
( MOV CH,0 )
NEXT: LODSB
( CBW )
ADD BX,AX
LOOP NEXT
POP CX
( MOV AX,BX )
IDIV CL
( POP SI )
RET
AVER ENDP
七、改错题:下面是将AL中低4
用。程序中有错,请改正。 ALTOASC MACRO AND AL,0FH JL ALLN1 ADD AL,7 ALLN1: ADD AL,30 ALTOASC END 八、编程题
1.编写一个子程序,完成自然数1~100的求和运算。
SUM PROC NEAR
PUSH AX
PUSH CX
MOV AX,0
MOV CX,100
AGAIN:
ADD AX,CX
LOOP AGAIN
POP CX
POP AX
SUM ENDP
2.编写多字节加法子程序,写出子程序说明文件。
子程序名称:PADD
子程序功能:多字节加法
入口参数:两数据的首地址分别为DATA1和DATA2,数据个数存放在CX中
出口参数:多字节数据的和存放在首地址为SUM的内存中
受影响的寄存器:AX、BX、CX。
PADD PROC NEAR
MOV BX,0
MOV CX,LEN
CLC
AGAIN:
MOV AL,DATA1[BX]
ADC AL,DATA2[BX]
MOV SUM[BX],AL
INC BX
LOOP AGAIN
PADD ENDP
3.数据区保存有10个学生的学习成绩,要求编写一个子程序,将每个学生的成绩转换成五个等级(A:90~100;B:80~89;C:70~79;D:60~69;E:60以下),然后将等级存放在原数据位置。要求:用寄存器传递参数方法来做。
COV PROC NEAR
PUSH AX
PUSH BX
PUSH CX
MOV BX,0
MOV CX,10
AGAIN:
MOV AL,DATA[BX]
CMP AL,60
JL A60
CMP AL,70
JL A70
CMP AL,80
JL A80
CMP AL,90
JL A90
MOV DATA[BX],41H
JMP LOP
A90: MOV DATA[BX],42H
JMP LOP
A80: MOV DATA[BX],43H
JMP LOP
A70: MOV DATA[BX],44H
JMP LOP
A60: MOV DATA[BX],45H
LOP: INC BX
LOOP AGAIN
POP CX
POP BX
POP AX
COV ENDP
4.编写计算某项比赛参加者平均分的子程序。给定条件:12名评委,每名评委给分范围0~10分(整数),存放在DATAX数组中,将平均分的整数部分存入AVERAGE单元。
AVE PROC NEAR
;===SUM====
MOV CX, 12
MOV SI, 0
MOV AL, 0
AGAIN:
ADD AL,DATAX[SI]
INC SI
LOOP AGAIN
;=====MAX=====
MOV SI, 0
MOV BL,0
MOV CX,12
AGAIND:
CMP BL,DATAX[SI]
JA NEXTD
MOV BL,DATAX[SI]
NEXTD: INC SI
LOOP AGAIND
;====MIN=====
MOV SI, 0
MOV BH,0
MOV CX,12
AGAINX:
CMP BH,DATAX[SI]
JB NEXTX
MOV BH,DATAX[SI]
NEXTX: INC SI
LOOP AGAINX
SUB AL,BL
SUB AL,BH
CBW
MOV CL,12
DIV CL
MOV AVERAGE,AL
AVE ENDP
5.定义将任一个寄存器循环左移或右移N位的宏指令。
YIWEI MACRO REG,LR,N
MOV CL,N
RO&LR REG,CL
ENDM
6.试定义求两个多字节数之和的宏指令。
MADD MACRO SRC,DST,SUM,LEN
LOCAL AGAIN
MOV BX,0
MOV CX,LEN
CLC
AGAIN:
MOV AL,SRC[BX]
ADC AL,DST[BX]
MOV SUM[BX],AL
INC BX
LOOP AGAIN
ENDP
第十章课外练习题
一、单项选择题:
1.中断向量是指( B )。
(A)中断向量表的地址 (B)中断处理子程序的入口地址
(C)被中断程序的入口地址 (D)被中断程序的断点地址
2.8086∕8088微处理器可访问的I ∕ O地址空间大小为( B )。
(A)1KB (B)64KB (C)1MB (D)16MB
3.以80X86为CPU的PC机,在实地址工作方式下,其中断向量长度为( B )。
(A)8个字节 (B)4个字节 (C)2个字节 (D)1个字节
4.在下列指令中,有( B )指令是不合法的。
①MOV [SI],[DI]
②IN AL,DX
③LEA AL,SI
④JMP WORD PTR [BX]
(A)1条 (B)2条 (C)3条 (D)4条
5.根据下面提供的PC机内存中的数据,INT 11H中断服务程序的入口地址是( B )。 0000:0040 B3 18 8A CC 4D F8 00 F0—41 F8 00 F0 C5 18 8A CC 0000:0050 39 E7 00 F0 A0 19 8A CC—2E E8 00 F0 D2 EF 00 F0
(A)4DF8:00F0 (B)F000:F84D (C)A019:8ACC (D)CC8A:19A0
二、填空题
1.在IBM—PC机中,CPU与外设之间的信息交换通常采用(查询)方式、(中断)方式和DMA方式。
2.(中断)是一种使CPU中止正在执行的程序而转去处理特殊事件的操作。
三、简答题
1.请叙述I/O地址空间的含义?
答:I/O地址的空间存在与接口电路中,CPU对此空间的访问采用I/O指令完成。此地址空间大小为64KB。
2.IRET指令的主要作用是什么?
答:IRET中断返回指令。它使CPU从中断服务程序返回被中断的断点处继续执行。
3.计算机硬件中为什么采用接口装置?分为哪两类接口?
答:其一,CPU与外设两者的信号线不兼容;其二,两者的工作速度不兼容;其三,若不通过接口,而由CPU直接对外设的操作实施控制,就会使CPU处于穷与应付与外设打交道之中,大大降低CPU的效率;其四,若外设直接由CPU控制,也会使外设的硬件结构依赖与CPU,对外设的发展不利。因此,在CPU与外设之间有必要设置接口装置,以便协调CPU与外设两者的工作,提高CPU的效率,并有利于外设按只身的规律发展。接口分为并行分为和串行分为。
4.通常所说的I/O操作是指CPU直接对I/O设备进行操作,这话对吗?
答:错误。是指对I/O端口的操作,而不是对I/O设备的操作。即CPU所访问的是I/O设备相关的端口,而不是I/O设备本身。
5.在独立编址方式下,CPU采用什么指令来访问端口?
答: IN AL,PORT ;输入
OUT PORT,AL ;输出
6.什么是端口?答:端口(PORT)是接口电路中能被CPU直接访问的寄存器的地址。
四、编程题
1.用80286以上指令实现32位无符号数的乘法运算。两个乘法操作数分别放在VAR1和VAR2地址内,运算后的结果,则放在RESULT地址内。
.MODEL SMALL
.486
.STACK
.DATA
VAR1 DD 12121212H
VAR2 DD 34343434H
RESULT DD 2 DUP(0)
.CODE
.STARTUP
MOV EAX,VAR1
MUL VAR2
MOV RESULT,EAX
MOV RESULT+4,EDX
.EXIT 0
END