微机原理习题4答案Word格式文档下载.doc
《微机原理习题4答案Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《微机原理习题4答案Word格式文档下载.doc(10页珍藏版)》请在冰点文库上搜索。
CODEENDS
ENDSTART
2.将8个16位无符号数相加,结果保存在32位无符号数SUM中;
COUNTEQU($-BUF)/2
SUMDD0
STACK1SEGMENTSTACK
DW100DUP(0)
CODE,DS:
DATA,SS:
STACK1
LEABX,BUF
MOVDX,0000H
LOP:
MOVAX,[BX]
ADDWORDPTRSUM,AX
ADCWORDPTRSUM+2,DX
INCBX
LOOPLOP
MOVAX,4C00H
INT21H
3.以十进制形式在计算机屏幕上显示内存中的一个8位有符号数,例如:
若内存单元中存放的数据为7FH,则在屏幕上显示+127,若内存单元存放的数据为0FFH,则应在屏幕上显示-1;
DATASEGMENT
VAR DB 0FFH
STR1DB'
THERESULTIS:
$'
DATAENDS
SS_SEGSEGMENTSTACK
DW 100DUP(0)
SS_SEGENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
SS_SEG
MOV AX,DATA
MOV DS,AX
LEA DX,STR1
MOV AH,09H
INT 21H
MOV DL,'
+'
CMP VAR,0
JGENEXT
-'
NEG VAR
NEXT:
MOV AH,02H
MOV AL,VAR
MOV BL,10
MOV CL,0
AND AH,0
DIV BL
PUSH AX
INC CL
CMP AL,0
JNZ LOP1
POP AX
MOV DL,AH
ADD DL,30H
MOV AH,2
INT 21H
LOOP LOP2
MOVAX,4C00H
CODEENDS
ENDSTART
4.从键盘输入一个4位十进制数,然后以16进制形式显示在屏幕上,试编程;
例如:
输入1024在屏幕上应该显示0400H
INPUTDATA:
BUF DB 20
DB 4
DB 4DUP(?
)
STR2DB0AH,0DH,'
'
'
$'
DB 100DUP(0)
MOV AH,0AH
LEA DX,BUF
MOV CX,03H
LEA SI,BUF+2
AND BX,0H
MOV DL,0AH
MOV AL,[SI]
SUB AL,30H
PUSH CX
MUL DL
POP CX
ADD BX,AX
INC SI
LOOP LOP1
AND CH,00H
MOV CL,[SI]
SUB CL,30H
ADD BX,CX
LEA DX,STR2
MOV AX,BX
ANDCH,00H
MOV CL,04H
MOV DH,04H
MOV DL,00H
AAA1:
AND AX,000FH
PUSH AX
DEC DH
INC DL
SHR BX,CL
CMP DH,0
JA AAA1
MOVCL,DL
BBB:
POP DX
CMP DL,09H
JB NEXT
ADD DL,07H
LOOP BBB
MOV DL,'
H'
MOV AX,4C00H
CODE ENDS
END START
5.数据段中存放有一个无符号字数据VAR,将其转换成非压缩格式的BCD码,存于BUF开始的单元中(高位在前);
若VAR为0800H,则转换后(BUF)=20H (BUF+1)=48H
DATASEGMENTPARA
VAR DW 0800H
BUF DB 2DUP(0)
DW 100DUP(0)
CODESEGMENTPARA
MOV CX,16
MAIN1:
SHL VAR,1
MOV BX,4
MOV CX,5
MAIN2:
MOV AL,BUF[BX]
ADC AL,AL
AAA
MOV BUF[BX],AL
DEC BX
LOOP MAIN2
LOOP MAIN1
EXIT:
MOV AX,4C00H
CODE ENDS
6.内存中以str1和str2开始分别存放了两个字符串,结束符为NULL(ASCII码为0),将str2连接到str1后,形成1个字符串,并将连接后的字符串str1输出到屏幕上;
STR1 DB '
GOODMORNING,'
00H
STR DB 50DUP(0)
STR2 DB '
MrWANG!
'
0AH,0DH,00H
MOVAX,DATA
MOV DS,AX
LEASI,STR1
CMP AL,00H
JE JP1
JP2:
JA JP2
JP1:
MOV CX,01H
LEA BX,STR2
MOV AH,[BX]
MOV [BX],AH
CMP AH,00H
JE JP3
MOV [SI],AH
JP4:
INC BX
INC CX
JA JP4
JP3:
INCSI
MOV[SI],BYTEPTR'
MOV AX,4C00H
CODE ENDS
7.统计10个有符号字节数中,大于0、小于0、等于0的个数,分别存放在NUM1、NUM2、NUM3三个变量中,并找出最大值、最小值分别存放到MAX、MIN变量中,再求10个数的和,将结果存放到16位有符号数SUM中。
NUM DB 0F0H,03H,0B4H,0AH,0AAH,00H,80H,7FH,99H,21H
COUNT EQU ($-NUM)
ORG 0010H
NUM1 DB 0
NUM2 DB 0
NUM3 DB 0
MIN DB 0
MAX DB 0
SUM DW 0
MOV SS,AX
LEA SI,NUM
MOV CX,COUNT
MOV BX,0000H
MOV DX,0000H
CMP AL,0
JG DA
JL XIAO
JE DENG
DA:
INC BH
JMP AAA1
XIAO:
INC BL
JMP AAA1
DENG:
INC DH
LOOP LOP
LEA SI,NUM1
MOV [SI],BH
LEA SI,NUM2
MOV [SI],BL
LEA SI,NUM3
MOV [SI],DH
MOV CX,COUNT-1
LEABX,NUM
MOVAL,[BX]
CMPAL,[BX]
JLENEXT
XCHGAL,[BX]
MOV[BX-1],AL
LOOP MAIN2
POP CX
LOOP MAIN1
LEA SI,MIN
MOVAL,NUM
MOV[SI],AL
LEA SI,MAX
MOVBL,NUM+9
MOV[SI],BL
MOVSI,OFFSET NUM
MOV CX,COUNT
MOV AX,0
ANDBX,0
MOV BL,[SI]
ADD AX,BX
INCSI
LEA SI,SUM
MOV [SI],AX
MOV AX,4C00H
INT 21H
END START
8若程序的数据段定义如下,写出各指令语句独立执行后的结果。
DSEGSEGMENT
DATA1DB10H,20H,30H
DATA2DW10DUP(?
StringDB‘123’
DSEGENDS
(1)MOVAL,DATA1 10H->
AL
(2)MOVBX,offsetDATA2 DATA2代表的首地址赋给BX
(3)LEASI,String String代表的首地址赋给BX
ADDDI,SI SI+DI->
DI
9假设数据项定义如下:
DATA1DB‘HELLO!
GOODMORNING’
DATA2DB20DUP(?
用串操作指令编写程序段,使其分别完成一下功能。
(1)从左到右将DATA1中的字符串传送到DATA2中;
LEA SI,DATA1
LEA DI,DATA2
MOV CX,20
CLD
REP MOVSB
(2)传送完后,比较DATA1和DATA2中的内容是否相同;
REPE CMPSB
(3)把DATA1中的第3个字节和第四个字节装入AX;
ADD SI,2
LODSW
(4)将AX的内容存入DATA2+5开始的字节单元中;
ADD DI,5
STOSW
10执行下列指令后,AX寄存器中的内容是多少?
TABLEDW10,20,30,40,50
ENTRYDW3
……
MOVBX,OffsetTABLE
ADDBX,ENTRY
MOVAX,[BX] [AX]=1400H
存储器
11图示以下数据段在存储器中的存放形式;
10H
34H
07H
09H
42H
00H
48H
45H
4CH
4FH
21H
CDH
ABH
DATASEGMENT
DATA1 DB10H,34H,07H,09H
DATA2 DW2DUP(42H)
DATA3DB‘HELLO!
’
DATA4EQU12
DATA5DDABCDH
12阅读下边的程序段,试说明它实现的功能是什么?
DATASEGMENT
DATA1DB'
ABCDEFG'
CODESEGMENT
ASSUMECS:
AAAA:
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETDATA1
MOVCX,7
MOVAH,2
MOVAL,[BX]
XCHGAL,DL
INCBX
INT21H
LOOPNEXT
MOVAH,4CH
ENDAAAA
此程序功能为:
输出字符串‘ABCDEFG’。