test4华南农业大学汇编答案
- 格式:doc
- 大小:56.50 KB
- 文档页数:7
汇编语言 4
一、简答题
1.下列程序段执行完后AX和BX寄存器的内容是多少?
MOV BX,0
MOV AX,1
MOV CX,5
LOP: SAL AX,1
ADD BX,AX
LOOP LOP
AX=32D=0020H,BX=62=003EH
2. 下列程序段执行完后DX寄存器的内容是多少?
MOV DX,1
MOV BL,2
MOV CX,5
NEXT:MOV AL,BL
INC BL
MUL BL
ADD DX,AX
LOOP NEXT
DX=006FH
3. 执行下面的程序段后,AX寄存器的内容是多少?
MOV AX,12H
MOV BX,34H
MOV CL,8
ROL AX,CL
ADD AX,BX
AX=1234H
4.已知BUF开始的数据区中存放有10个大、小写字母,下面程序段完成的功能是什么?
MOV CX,10
LEA BX,BUF
K2:MOV AL,[BX]
CMP AL,'Z'
JBE K1
SUB AL,20H
MOV [BX],AL
K1:INC BX
LOOP K2
┇
将BUF中的小写字母转换成大写字母
5.执行下面的程序段后,AX寄存器的内容是多少?
TAB DW 1,2,3,4,5,6
ENTRY EQU 3
MOV BX,OFFSET TAB
ADD BX,ENTRY
MOV AX,[BX]
AX=0300H
二、程序填空题
以下程序完成对首地址为A的10个字正整数组从小到大排序。
填上缺少的指令。
DATA SEGMENT
A DW 2,9,8,6,12,16,1,10,18,11
N EQU ($-A)/2
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
___(1)_MOV AX,DATA__
___(2)_MOV DS,AX__
MOV CX,N
___(3)_DEC CX__
LOOP1:
MOV DI,CX
MOV BX,0
LOOP2:
MOV AX,A[BX]
CMP AX,A[BX+2]
___(4)_JB CONTINUE__
XCHG AX,A[BX+2]
MOV A[BX],AX
CONTINUE:
ADD BX,2
LOOP LOOP2
__(5)MOV CX,DI____
LOOP LOOP1
MOV AH,4CH
INT 21H
CODE ENDS
END START
三、阅读程序
1. 仔细阅读下面程序,说明该程序的功能。
DAT SEGMENT
X DB 'THIS IS MY FIRST PROGRAM!$' DAT ENDS
STA SEGMENT STACK
DB 100H DUP(?)
STA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DAT,SS:STA
START: MOV AX,DAT
MOV DS,AX
XOR AX,AX
MOV DX,OFFSET X
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
输出数据段中X变量的字符串'THIS IS MY FIRST PROGRAM!'
2. 仔细阅读下面子程序,说明该子程序的功能。
KEY PROC NEAR
PUSH AX
XOR DX,DX
L1: MOV AH,1
INT 21H
CMP AL,′#′
JZ BACK
CMP AL,30H
JB L1
CMP AL,39H
JA L1
AND AL,0FH
ADD DL,AL
ADC DH,0
JMP L1
BACK: RET
KEY ENDP
从键盘输入一串以‘#’为结束符的字符串,计算字符串所出现数字的和并存在DX
3.阅读如下程序,说明程序的功能。
STACK SEGMENT STACK
DB 200H DUP(?)
TOS LABEL WORD
STACK ENDS
DATA SEGMENT
VALUE DW 0FFFEH
DIVSOR DW 10000,1000,100,10,1
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC FAR
MOV AX,STACK
MOV SS,AX
MOV SP,OFFSET TOS
PUSH DS
XOR AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV CX,5
MOV AX,VALUE
MOV SI,OFFSET DIVSOR
LP1: XOR DX,DX
DIV WORD PTR[SI]
PUSH DX
ADD AL,30H
MOV DL,AL
MOV AH,2
INT 21H
INC SI
INC SI
POP AX
LOOP LP1
RET
MAIN ENDP
CODE ENDS
END MAIN
以10进制的方式显示 16进制数0FFFEH
4.下面是某程序的汇编列表文件,请将程序执行过程中堆栈最满时每个单元的内容填
入下表。
假设程序执行时PSP段地址为1234H。
0000 STACK SEGMENT STACK
0000 0100[ DW 100H DUP(?)
???? ]
0200 TOP LABEL WORD
0200 STACK ENDS
0000 CODE SEGMENT
ASSUME CS:CODE,SS:STACK
0000 MAIN PROC FAR
0000 B8 ---- R MOV AX,STACK
0003 8E D0 MOV SS,AX
0005 BC 0200 R MOV SP,OFFSET TOP
0008 1E PUSH DS
0009 33 C0 XOR AX,AX
000B 50 PUSH AX
000C E8 0010 R CALL P1
000F CB RET
0010 MAIN ENDP
0010 P1 PROC NEAR
0010 E8 0017 R CALL P2
0013 E8 001B R CALL P3
0016 C3 RET
0017 P1 ENDP
0017 P2 PROC NEAR
0017 E8 001C R CALL P4
001A C3 RET
001B P2 ENDP
001B P3 PROC NEAR
001B C3 RET
001C P3 ENDP
001C P4 PROC NEAR
001C C3 RET
001D P4 ENDP
001D CODE ENDS
END MAIN
( )
( )
(01F6 )
(01F7 )
(01F8 )
(01F9 )
(01FA )
(01FB )
(01FC )
(01FD )
(01FE )
(01FF )
SP
四、程序设计题
1.已知变量X的值为2767,请编程序统计变量X中的二进制值中有多少个1,并记入ONE 变量中。
2.从键盘上输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示出计数结果。
3. 在首地址为DATA的字数组中,存放了100H个16位补码数,编一个程序求出它们平均值放在地址AVER中,并求出数组中有多少个数大于此平均值,将结果存放在COUNT中。
4.已知数据块BUFA中存放15个互不相同的字数据,BUFB中存放20个互不相同的字数组,编一个程序,将既在BUFA中出现,又在BUFB中出现的数据存放到BUFC开始的缓冲区中。
附录1:部分字符ASCII(16进制数)
字符回车换行空格 $ 0 1 2 (9)
ASCII 0D 0A 20 24 30 31 32 (39)
字符 A B C … Y Z a b c … y z
ASCII 41 42 43 … 59 5A 61 62 63 … 79 7A
附录2:部分DOS功能调用参数
功能号功能描述调用参数返回参数
1 键盘输入并回显无 AL=输入字符ASCII
2 显示输出 DL=输出字符ASCII 无
5 打印机输出 DL=输出字符ASCII 无
9 显示字符串 DS:DX=串首址,以$结无
束字符串
A 键盘输入到缓冲区 DS:DX=缓冲区首地址 (DS:DX+1)=实际输入 (DS:DX)=缓冲区容量的字符个数
(DS:DX+2)开始=输入
的字符串。