《微型计算机原理及应用》配套习题集
第四章 汇编语言和汇编程序
一、 回答下列问题
1、 何谓汇编语言程序?何谓汇编程序?简述汇编程序的功能。
2、 什么叫做变量?变量有哪几种属性?程序中如何放问变量?
3、 什么叫做标号?标号有哪几种属性? 4、 8088汇编语言中有哪几类运算符?
5、 什么叫做表达式?它的运算规则是什么? 6、 8088/8086汇编语言程序中段的类型有哪几种?段定义中定位类型、组合类型和类别名各有什么作用?
7、 设VALA EQU 200 VALB EQU 30 VALC EQU 1BH 下列表达式的值各为多少? (1)(BALA*VALC+BALB)/BALC (2)(VALA MOD VALC-VALB/VALC (3)(BALB AND 0FH)OR (VALB XOR 0FH) (4)(BALA GE VALB )AND 0FH
8、 根据下列数据定义,各条指令单独运行后,AX的内容是什么?
TABLEA DW 10 DUP(?) TABLEB DB 10 DUP(?) TABLEC DB ‘1234’ TABLED DW 1,2,3,4
1.MOV AX,TYPE TABLEA 的偏移地址
(1) MOV AX,TYPE TABLEB (2) MOV AX,TYPE TABLEC (3) MOV AX,TYPE TABLED (4) MOV AX,LENGTH TABLEA (5) MOV AX,LENGTH TABLEB (6) MOV AX,LENGTH TABLEC (7) MOV AX,LENGTH TABLED
(8) MOV AX,SIZE TABLEA字符长度 (9) MOV AX,SIZE TABLEB字符长度 (10) MOV AX,SIZE TABLEC字符长度 (11) MOV AX,SIZE TABLED字符长度 9、 执行下列指令后,AX寄存器的内容是什么? TABLE DW 0,100,200,300,400 DISTA DW 6
(1)MOV OFFSET TABLE ADD BX,DISTA MOV AX,[BX] (2)LEA BX,TABLE MOV AX,2[BX]
(1) MOV SI,4
MOV BX,[OFFSET TABLE MOV AX,[BX][SI] (2) MOV BX,DISTA MOV AX,TABLE[BX]
10、 画图说明下列语句分配存储空间及初始化的数据值。
(1) BYTE-VAR DB ‘BYTE’,12,12H,2 DUP (0,3 DUP(2))
(2) WORD-VAR DW 4 DUP(0,1,2),-5,‘BY’,‘TE’
11、 定义一个数据段的字符变量和数据变量。 (1) TRING为字符串变量:‘Personal //EG: da1 DB 1,2,3,4 computer’ da2 DW 10 DUP(1),DW 5 DUP(?)
第6页 共12页
(2) VALD为十进制数字节变量12,99
(3) VALH为十六进制数字变量32H,0FAH (4) VALZ为10个零的字节变量 (5) VALW为20个字单元
12、 根据数据段的定义,答出L值是多少?它表示什么意义? (1)BUFA DB 0 BUFB DB 1
L EQU BUFB-BUFA (2)STA DW 20 DUP(?) L EQU LENGTH STA 13、 定义一个数据段,要求如下: (1) 段界起始于字边界
(2) 该段与同名逻辑段相邻连接成一个物理段 (3) 类别号为‘DATA’ (4) 定义数据12,30,‘ABCD’ (5) 保留20个字的存储区 二、填空题
1、假设(DS)=2000H,(BX)=1256H,(SI)=528FH;位移量TABLE=20A1H,(232F7H0=3280H,(264E5H)=2450H,则 执行指令JMP BX后,(IP)= 1256 h ; 执行指令JMP TABLE[BX]后,(IP)= 3280 h ; 执行指令JMP [BX][SI]后,(IP)= 2450 h 。
2、在1000H单元中有一条二字节指令JMP SHORT LAB,如果其中偏移量分别为30H、6CH、0B8H,则转向地址LAB的值分别为 ; ; ; 3、数据段中有以下定义: ARRAY1 EQU 16H ARRAY2 DW 16H
请指出下面两条指令的寻址方式:
MOV AX,ARRAY1; 寻址方式 段内 。 MOV AX,ARRAY2; 寻址方式 段间 。 4、下面两个语句的区别在于 、 。 X1 EQU 1000H X2 =1000H
5、指令“AND AX,STR1 AND STR2”中,STR1和STR2是两个已赋值的变量,两个AND的区别是 、 。 6、指令LOOPZ/LOOPE是结果 或 发生转移的指令。而指令LOOPNZ/LOOPNE则是结果 或 发生转移的指令。
7、调用指令CALL可分为 、 、 和 等四种调用。
8、在汇编语言中,一个过程有NEAR和FAR两种属性。NEAR属性表明主程序和子程序 ,FAR属性表示主程序和子程序 。
9、串处理指令规定源寄存器使用 ,源串在 段中;目的寄存器使用 ,目的串必须在 段中。
10、 是过程定义结束伪指令,与 配套使用。 是段定义结束伪指令,与 配套使用。
11、一个有16个字的数据区,它的起始地址为70A0:DDF6H那么该数据区的最后一个字单元的物理地址为 7DAF6 H。 12、对于下面的数据定义: A1 DW 20 DUP(?) A2 DB 20 DUP(?) A3 DB ‘987654321’ ?? MOV AX,LENGTH A1 MOV BX,LENGTH A2 MOV CX,LENGTH A3
《微型计算机原理及应用》配套习题集
da3 DB 'ABCD'
求出以下指令执行后的结果:
(1)MOV AX,TYPE da1 AX= (2)MOV BX,TPYE da2 BX= (3)MOV CX,LENGTH da2 CX= (4)MOV DI,SIZE da2 DI= (5)MOV SI,LENGTH da3 SI= (1)M1 DB 1234 ( A ) (2)M2 DW ‘ABCD’ ( A ) (3)M3 DW 50H : :
MOV AL,M3 ( B ) (4)M4 EQU 10H : :
MOV M4,AL ( A ) (5)M5 DB ? : -------------------------------------------------------- MOV BX答:(1)AX=12 ;错。AX=1 MOV [BX](2)BX=11 ;错。BX=2 (3)CX=10 ;对。 (4)DI=30 ;错。DI=20
(5)SI=1 ;对。
各条指令执行后,相应寄存器的内容为:(AX)= ,(BX)= ,(CX)= 9876 。 13、在数据段定义有一字变量如下: DATA SEGMENT
ARRAY DW 2,$+2,5,7,$+6,0DH DATA ENDS
填入数据段ARRAY区存储单元的内容。 14、执行下列指令后:
TABLE DW 10,20,30,40,50 ENTRY DW 3 ?? MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,[BX] 寄存器(AX)= 13 四、是非判断题
1、 程序在数据段中的定义如下: DATA SEGMENT NAMES DB ‘ABCD’ NAMET DW 20 DATA ENDS
请判断下列指令是否正确?正确的填‘A’,错误的填‘B’并说明原因
(1) MOV BX,OFFSET NAMES ( ) MOV AL,[BX+2] ( B ) (2) MOV AX,NAMES ( A)
(3) MOV AX,WORD PTR NAMES+1 ( A )
(4) MOV AL,NAMET ( ) (5) MOV AL,BYTE PTR NAMET ( A ) (6) MOV AX,DATA ( A ) MOV DS,AX ( A )
(7) MOV AX,SEG NAMES ( ) (8) MOV BX,DATA ( A )
MOV AL,[BX+3] ( B )
2、 下面各题中有无语法错误?若无语法错误,请在括号中填‘A’,若有语法错误,请在括号中填‘B’,并按其意图修改题中的相应语句。
第7页 共12页
:
,M5
,1000H B )(
《微型计算机原理及应用》配套习题集
REPEAT:ADD AL,BL ADD AL,BL ADC AH,0 DEC CL 一、完成下列练习
JNZ REPEAT 1、 设(DS)=0300H,(CS)=0200H,(IP)=0100H,
HLT (BX)=1000H,DISPLACE=2000H,(4000H)=5000H,(6000H)
(3)ASK: MOV DX,0210H =8000H
IN AL,DX 确定无条件转换指令的段内转移地址
TEST AL,48H (1) JMP BX
JNZ ASK (2) JMP [BX]
INC DX (3) JMP DISPLACE[BX]
MOV AL,0FFH 2、 设AX和BX寄存器中是有符号数,CX和DX寄存
OUT DX,AL 器中是无符号数,写出下列条件转移指令。
: (1) CX值高于或等于DX值,则转移HIEQU
: (2) AX值大于BX值,则转移GREAT
二、编写下列程序 (3) CX值为0,则转移ZERO
1、 数据段定义如下: (4) AX值小于或等于BX值,则转移SMAEQU
DATA SEGMENT (5) CX值低于或等于DX值,则转移LOWEQU
FIRST DB 90H,5FH,6EH,69H (6) AX为负值,则转移NEGAT
SECOND DB 4 DUP (?) (7) AX为偶数,则转移IMAGE
THIRD DB 4 DUP (?) 3、 写出下列串操作指令所替代的指令序列。
FORTH DB 4 DUP (?) (1) REP MOVSB
DATA ENDS (2) REP LODSB
(1) 编写程序,将FIRST开始的四个字节十六进制数(3) REP STOSB
左移两位,结果存放在SECOND开始的存储区中。 (4) REP SCASB
(2) 编写程序,将FIRST开始的四个字节十六进制数4、 指出下列指令序列中的错误。
右移4位,结果存放在THIRD开始的存储区中。 (1) CMP AL,-3
(3) 编写程序,求FIRST开始的四个字节十六进制数JA INVALID
的补码,结果存放在FORTH开始的存储区中。 :
2、 在内存缓冲区BCDBUF中,存放10个字节压缩的BCD:
数,编写程序求这10个数的和,结果送SUM缓冲(占用两个字节)。 INVALID:??
3、 编写程序计算S=2+4+6+??+200。
4、 编写将BUFFER为开始的100个连续单元清零的程序。 (2) START:MOV CX,3
5、 编写程序把SOURCE源数据区的100个数据,存放在SUB AL,10
DEST目的数据区。 LOOP START
6、 将FIRST单元开始的数据块传送到SECOND单元开始的:
存储区中,若发现传送的数据为0,则结束传送,分两种情况编写程:
序。 (3)CRAY PROC
(1) 两个数据区不重迭。 PUSH AX
(2) 两个数据区重迭。 ADD AX,BX
7、 编写一个程序,比较两个字符串是否相等。若两个字符 RET
串相等,则在RESULT单元存放字符‘E’;否则存放字符‘N’。 CRAY ENDP
8、 编写一个程序,求有20个元素的两个数组之和,并把(4)IN AL,PROT
和数存于新数组SUM中。 JPE NEXT
9、 FIRST和SECOND均为长度10个字节的数组,编写程序 :
将两个数组中的内容交换。 :
10、 一个字符串以‘$’字符结束,编写一个程序统计英文 NEXT:??
字母A出现的频率(不分大小写)。 5、 分析执行下列程序段完成什么功能?
(1) BEGIN:IN AL,5FH 三、填空
TEST AL,80H 1、 程序段如下: JZ NEGATIVE DATA SEGMENT MOV AH,0 ORG 2000H JMP STOP TWO=2
NEGATIVE:MOV AH,0FFH NUM DB 3,4 STOP: HLT WORDS DW 1011H,2022H
(2) START:IN AL,20H CHAR1 DB ‘13’ MOV BL,AL WORK DB 2 DUP(?) IN AL,30H TEN EQU 10 MOV CL,AL CHAR2 ‘5’ MOV AX,0 DATA ENDS
第五章 汇编语言程序设计
第8页 共12页
《微型计算机原理及应用》配套习题集
CODE SEGMENT (2) LOOPE L20 ASSUME CS:CODE,DS:DATA (3) LOOPNE L20 MAIN PROC FAR TITLE EXLOOP.COM START: PUSH DS CODE SEGMENT XOR AX,AX ASSUME CS:CODE,DS:CODE,SS:CODE PUSH AX ORG 100H MOV AX,DATA BEGIN:MOV AX,01 MOV DS,AX MOV BX,02 MOV AL,TWO MOV DX,03 MOV WORK,AL MOV CX,04 TWO=TWO-1 L20: INC AX ADD AL,TWO ADD BX,AX MOV WORK+1,AL SHR DX,1 RET ( ) MWIN ENDP RET CODE ENDS CODE ENDS END START END BEGIN 在上述三种情况下,当程序执行完后,(AX)= (1) 、(BX) 2、下列程序段运行后,A单元的内容为 。 (2) 、(CX)= (3) 、(DX)= (4) 。 DATA SEGMENT 5、假设X和X+2单元的内容为双精度数P,Y和Y+2单元的 A DW 0 内容为双精度数Q(X,Y)为低位数),下列程序段使2P>Q时,(AX) B DW 0 =2。请把程序填写完整。 C DW 230,20,54 MOV DX,X+2 DATA ENDS MOV AX,X CODE SEGMENT ADD AX,X
ASSUME CS:CODE,DS:DATA ADC DX,X+2 START PROC FAR CMP DX,Y+2 PUSH DS (1) Jz L2 XOR AX,AX (2) Jnz L1 PUSH AX CMP AX,Y MOV AX,DATA (3) Jz L2 MOV DS,AX L1:MOV AX,1 MOV BX,OFFSET C JMP EXIT MOV AX,[BX] L2:MOV AX,2 MOV B,AX EXIT:INT 21H MOV AX,2[BX] 阅读下面的程序,在 (1) 的情况下,本段程序的执行结果是 ADD AX,B (AH)=0;在 (2) 的情况下,其结果为(AH)=0FFH。 MOV A,AX IN AL,20H RET TEST AL,80H START ENDP JZ A CODE ENDS MOV AH,0 END START JMP B 3、分析以下程序段 A: MOV AH,0FFH
ADD AX,BX B: HLT JNO L1 6、下列程序段是比较AX,BX,CX中带符号数的大小,将最大擞 放JNC L2 在AX中。请将程序填充完整。 SUB AX,BX CMP AX,BX JNC L3 (1) Jz NEXT JNO L4 XCHG AX,BX JMP SHORT L5 NEXT: (mov2) AX,CX 如果AX和BX的内容给定如下: JGE OUT AX BX (3) AX,CX (1) 147B 80DC OUT:?? (2) B568 54B7 7、以下程序的功能是 (1) ,结果存放在 (2) 中。 (3) 42C8 608D START: IN AL,20 (4) D023 9FD0 MOV BL,AL (5) 94B7 B568 IN AL,30H 该程序执行后,程序转向 (1) ; (2) ; (3) ; (4) ; MOV CL,AL (5) 。 MOV AX,0
4、在下列程序的括号中分别填入如下指令: NEXT: ADD AL,BL
(1) LOOP L20 ADC AH,0
第9页 共12页
《微型计算机原理及应用》配套习题集
DEC CL (3)DL内容所在存储器的偏移地址为 ; JNZ NEXT A)1FFFH B)1FFEH HLT C)2000H D)1FFCH 8、以下程序段的作用是 。 (4)(AX)= ; STR1 DB 300 DUP(?) A)0H B)78H STR2 DB 100 DUP(?) C)0F0H D)56H ?? (5)(DI)= 。 MOV CX,100 A)1234H B)5678H MOV BX,200 C)2000H D)00F0H
MOV SI,0 (6)(DX)= ; NEXT:MOV AL,STR1[BX][SI] A)5678H B)0ACFH MOV STR2[DI],AL C)2B3CH D)0ABF0H SIC SI (7)标志位ZF= 。 INC DI A)0 B)1 LOOP NEXT C)不定
9、如果数据段中有一个如图所示的字节型表TAB,并且有一个名(8)标志位ZF= 。 为DISP的字节型内存变量区,请阅读如下指令,它完成的 功能。A)0 B)1 [DX中高4位换成ASCII码顺序存入DISP中] C)不定
MOV CX,4 3、下列程序执行后,请选择正确的结果: MOV BX,OFFSET TAB 10A3H:2000H XOR AL,AL MOV DI,OFFSET DISP 2002H MOV AX,CS HT:SHL DX,1 2004H MOV SS,AX RCL AL,1 2006H MOV SP,2F00H SHL DX,1 2009H MOV DX,2012H RCL AL,1 200CH PUSH DX SHL DX,1 200DH CALL 2700H RCL AL,1 2010H ADD CX,DX SHL DX,1 2012H HLT RCL AL,1 10A3H:2700H POP CX AND AL,0FH RET XLAT TAB (1)(AX)= b MOV [DI],AL A)10A3H B)2000H INC DI C)2012H D)2799H LOOP HT (2)(SP)=
A)2F02H B)2F00H 四、选择题
C)2EFEH D)2EFCH 1、 对于下列程序段:
(3)(DX)= c AGAIN:MOV AL,[SI]
A)2700H B)2F00H MOV ES:[DI],AL
C)2012H D)2010H INC SI
(4)(CX)= INC DI
A)2700H B)2F00H LOOP AGAIN
C)2010H D)4024H 也可用指令 完成同样的功能。
(5)ZF= A)REP MOVSB B)REP LODSB
A)1 B)0 C)REP STOSB D)REPE SCASB
C)不定 D)-1 2、执行下列程序,选择正确的结果:
4、下面是多字节加法程序,第一个数和是8A0BH,第二个数是MOV SP,2000H
D705H。 MOV AX,0F0H
DATA SEGMENT MOV SI,1234H
FIRST DB (1), (2),0H MOV DX,5678H
SECOND DB 8a0b(3),D705H(4) PUSH SI
DATA ENDS POP DI
CODE SEGMENT SHL DX,1
ASSUME CS:CODE,DS:DATA TEST AX,DX
START:MOV AX,DATA PUSH DX
MOV DS,AX HLT
MOV CX, (5) (1)SP= d ;
MOV SI,0 A)2000H B)1FFFH
(6) C)2001H D)1FFEH
NEXT: MOV AL,SECOND[SI] (2)DH内容所在存储器的偏移地址为 A ;
ADC FIRST[SI],AL A)1FFFH B)1FFEH
INC SI C)1FFDH D)1FFCH
第10页 共12页