微机原理作业答案整理版Word文件下载.docx
《微机原理作业答案整理版Word文件下载.docx》由会员分享,可在线阅读,更多相关《微机原理作业答案整理版Word文件下载.docx(37页珍藏版)》请在冰豆网上搜索。
0E65DH(16进制首位是字母则前加0)
2.3段地址和偏移地址为1000H:
117AH的存储单元的物理地址是什么?
而1109H:
00EAH或1025H:
0F2AH的存储单元的物理地址又是什么?
这说明了什么问题?
物理地址=段地址×
10H+偏移地址
1000H:
117AH存储单元的物理地址1000H×
10H+117AH=1117AH
1109H:
00EAH存储单元的物理地址1109H×
10H+00EAH=1117AH
1025H:
0F2AH存储单元的物理地址1025H×
10H+0F2AH=1117AH
说明:
存储单元的物理地址唯一,逻辑地址不唯一;
2.5如果从存储器的2000H地址开始分配段区,要求数据段占用1KB范围,堆栈段占用512B范围,代码段占用8KB范围。
按数据段、堆栈段和代码段的顺序连续存放,试画出存储器分段地址分配示意图,图中应写明各段寄存器的内容?
02000H
1KB
DS:
0200
02400H
512B
SS:
0240H
02600H
8KB
CS:
0260H
注:
1KB=2^10=10000000000B=400H
SS:
起始物理地址2000H+1KB=2000H+400H=02400H
512B=2^9=1000000000B=200H
CS:
起始物理地址2400H+512B=2400H+200H=02600H
2.7现有DS=2000H,BX=0100H,SI=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各指令执行完后AX寄存器的内容。
题号
指令
AX寄存器的内容
简单解释
(1)
MOVAX,1200H
1200H
立即数赋给AX
(2)
MOVAX,BX
0100H
寄存器BX值赋给AX
(3)
MOVAX,[1200H]
4C2AH
PA=DS×
16+1200H=21200H
(4)
MOVAX,[BX]
3412H
16+BX=20100H
(5)
MOVAX,1100H[BX]
16+BX+1100H=21200H
(6)
MOVAX,[BX][SI]
7856H
16+BX+SI=20102H
(7)
MOVAX,1100H[BX][SI]
65B7H
16+BX+SI+1100H=21202H
2.8假定DS=2000H,ES=2100H,SS=1500H,SI=00A0H,BX=0100H,BP=0010H,数据段中变量名VAL的偏移地址值为0050H,试指出下面源操作数字段的寻址方式是什么?
其物理地址值是多少?
源操作数的寻址方式
源操作数的物理地址
MOVAX,00ABH
立即寻址
在代码段中,与CS、IP有关
寄存器寻址
在寄存器中
MOVAX,[100H]
直接寻址
DS×
10H+100H=20100H
寄存器间接寻址
10H+BX=20100H
MOVAX,[BP]
SS×
10H+BP=15010H
MOVAX,[BX+10]
带位移的基址寻址
10H+BX+10=2010AH
基址变址寻址
10H+BX+SI=201A0H
(8)
MOVAX,VAL
10H+VAL=20050H
(9)
MOVAX,ES:
[BX]
ES×
10H+BX=21100H
(10)
MOVAX,[SI]
10H+SI=200A0H
(11)
MOVAX,VAL[BX]
10H+BX+VAL=20150H
(12)
MOVAX,VAL[BX][SI]
带位移的基址变址寻址
10H+BX+SI+VAL=201F0H
2.9设AX=1122H,BX=3344H,CX=5566H,SP=2000H,试分析下列程序段执行后,AX、BX、CX、SP中的内容各为多少?
并画出堆栈变化示意图。
第1条指令
AX=1122H
PUSHAX
BX=3344H
SP→
22H
CX=5566H
11H
SP=1FFEH
第2条指令
PUSHBX
44H
33H
SP=1FFCH
第3条指令
PUSHCX
66H
55H
SP=1FFAH
第4条指令
POPAX
AX=5566H
第5条指令
POPCX
CX=3344H
2.10下列程序段中每一条指令执行完后,AX中的十六位进制内容是什么?
AX中的内容
MOVAX,0
AX=0000H
DECAX
AX=0FFFFH
DEC:
减一操作
ADDAX,7FFFH
AX=7FFEH
FFFF+7FFF=17FFEH,溢出得7FFEH
ADDAX,2
AX=8000H
NOTAX
AX=7FFFH
NOT:
逻辑非指令,原AX=100000000000B,逻辑非后(位取反):
AX=011111111111B=7FFFH
SUBAX,0FFFFH
减FFFFH相当于加其不码“1”
ADDAX,8000H
溢出
ORAX,0BFDFH
AX=0BFDFH
OR:
或指令;
ANDAX,0EBEDH
AX=0ABCDH
AND:
与指令
XCHGAH,AL
AX=0CDABH
高低位互换
SALAX,1
AX=9B56H(CF=1,PF=1)
0CDABH=1100110110101011左移1位后1001101101010110=9B56H
RCLAX,1
AX=36ADH(CF=1,PF=1,OF=1)
1001101101010110带进位循环左移
循环移位指令不影响除CF和OF以外的其他条件标志。
移位指令根据移位后的结果设置SF、ZF和PF位,AF位则无定义。
RCL:
OF=1最高有效位的值发生变化;
PF保留原来的值;
2.11将十六进制数62A0H与下列各个数相加,试给出和数及标志位AF,SF,ZF,CF,OF和PF的状态。
(1)9D60H(AF:
辅助进位标志位—做加法时D3位有进位或做减法时D3位有结借位则AF=1)
和数:
0H
AF=0,SF=0,ZF=1,CF=1,OF=0,PF=1
(2)4321H
0A5C1H
AF=0,SF=1,ZF=0,CF=0,OF=1,PF=0
2.12从下列各个数中减去4AE0H,试给出差值及标志位AF,SF,ZF,CF,OF和PF的状态。
(1)1234H
(2)9090H
AF=0,SF=1,ZF=0,CF=1,OF=0,PF=0
AF=0,SF=0,ZF=0,CF=0,OF=1,PF=0
2.13假设BX=00E3H,字变量VALUE中存放的内容为79H,确定下列各条指令单独执行后的结果。
BX内容
XORBX,VALUE
009AH
0000000011100011XOR0000000001111001
ANDBX,VALUE
0061H
0000000011100011AND0000000001111001
ORBX,VALUE
00FBH
0000000011100011OR0000000001111001
XORBX,0FFH
001CH
0000000011100011XOR0000000011111111
ANDBX,0
0000H
TESTBX,01H
00E3H
TEST指令只影响标志位,不影响结果
2.15假定DX=00B9H,CL=3,CF=1,确定下列各条指令单独执行后DX中的值。
SHR:
逻辑右移(无符号除以2);
SAR:
算术右移(有符号除以2)(详解见复习笔记第一页)
DX寄存器的内容
SHRDX,1
005CH
00B9H=0000000010111001B逻辑右移
SARDX,CL
0017H
00B9H=0000000010111001B算术右移
SHLDX,CL
05C8H
00B9H=0000000010111001B逻辑左移
SHLDL,1
0072H
B9H=10111001B逻辑左移
RORDX,CL
2017H
00B9H=0000000010111001B循环右移
ROLDL,CL
00CDH
B9H=10111001B循环左移
SALDH,1
00B9H
DH=0算术左移
RCLDX,CL
05CCH
00B9H=0000000010111001B带进位循环左移
RCRDL,1
00DCH
B9H=10111001B带进位循环右移
第3章宏汇编语言程序设计
3.1对于下面的数据定义,各条指令单独执行后,有关寄存器的内容是什么?
FLDBDB?
TABLEADW20DUP(?
)
TABLEBDB'
ABCD'
格式:
TYPE变量或标号功能:
计算变量或标号的类型值
DB、DW、DQ、DT定义变量、字变量、双字变量、长字变量、10字节变量对应类型值分别是1、2、4、8、10;
NEAR、FAR型标号对应的类型值分别是:
-1(FFH)、-2(FEH);
(1)MOVAX,TYPEFLDB;
AX=01H;
字节类型
(2)MOVAX,TYPETABLEA;
AX=02H;
字类型
(3)MOVCX,LENGTHTABLEA;
CX=14H;
DUP定义的变量,分配的单元数
(4)MOVDX,SIZETABLEA;
DX=28H;
SIZE=LENGTH*TYPE本题中即:
size=20*2=40=28H
(5)MOVCX,LENGTHTABLEB;
CX=01H;
非DUP定义的变量,LENGTH=1
3.2试写出完成下列操作的伪指令语句:
(1)将56H,78,B3H,100存放在定义为字节变量ARRAY的存储单元中。
ARRAYDB56H,78,0B3H,100
(2)将字数据2965H,45H,2965,A6H存放在定义为字变量DATA的存储单元中。
DATADW2965H,45H,2965,0A6H
(3)将字节数据56H,C6H,78H,12H存放在字变量ALPHA的存储单元中,并且不改变数据按字节存储的次序。
ALPHADW0C656H,1278H
(4)在BETA为首址的存储单元中连续存放字节数据,2个23,5个'
A'
,10个(1,2),20个空单元。
BETADB2DUP(23),5DUP('
),10DUP(1,2),20DUP(?
)
(5)在STRING为首址的存储单元中存放字符串'
THISISAEXAMPE'
。
STRINGDB'
(6)用符号COUNT替代100。
COUNTEQU100(或COUNT=100)
3.3画图表示下列语句中数据在存储器中的存储情况。
(1)BYTE_VARDB'
76,57H,3DUP(?
),2DUP(1,3)
(2)WORD_VARDW5DUP(0,1),?
'
AB'
CD'
7965=1F1DH。
(1)从左到右、从上到下为地址增大的方向。
41H
42H
43H
44H
4CH
57H
?
01H
03H
(2)从左到右、从上到下为地址增大的方向。
00
01
42
41
44
43
1D
1F
3.5假设程序中的变量定义如下:
BUF1DB100DUP('
BUF2DW1275H,567,0C5H
BUF3DB20DUP(?
BUF4DB7,4,6,9,8
(1)用一条指令将BUF1的偏移地址送入BX。
MOVBX,OFFSETBUF1或LEABX,BUF1
(2)将BUF2的第三字节数据送入CL。
MOVCL,BUF2+2
(3)将A6H送入BUF3的第十个字节单元中。
MOVBUF3+9,0A6H
(4)用伪指令写出BUF1和BUF2二者的总长度(字节数)
COUNTEQUBUF3-BUF1
3.7下列语句中,在存储器中每个变量分配到多少字节?
VR1DW9;
2字节
VR2DW4DUP(?
),2;
4*2+2=10字节
VR3EQU100;
0字节
VR4DDVR3DUP(?
);
100*4=400字节
VR5DB2DUP(?
VR3DUP(0,1));
2*(1+100*2)=402字节
VR6DB'
HOWAREYOU?
'
;
12字节
哭!
~哭也算时间哦!
---空字符!
~空字符也算字节哦!
3.8试写出一个完整的数据段DATA_SEG,首先把10个压缩的BCD码29存放在ARRAY变量字节单元中,紧接着把-25,4,10,76,3存放在ALPHA数组变量的字单元中,接着留100个空单元作为工作单元用,它定义为字节变量BUFFER。
DATA_SEGSEGMENT
ARRAYDB10DUP(29H)
ALPHADW-25,4,10,76,3
BUFFERDB100DUP(?
DATA_SEGENDS
3.9将存放在字节变量BCD1中的两个十进制数的ASCII码合并为一字节压缩型BCD码,存入字节变量BCD2,试编写程序。
(看不懂!
!
DATASEGMENT(蓝字为固定结构)
BCD1DB'
34'
BCD2DB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAL,BCD1
MOVCL,4
SALAL,CL
MOVBL,BCD1+1
ANDBL,0FH
ORAL,BL
MOVBCD2,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
3.12编写程序,计算Z=((W–X)/10*Y)2,r为相除所得余数。
其中W,X,Y均为8位有符号二进制数。
(懒得看!
DATASEGMENT
WDB12
XDB24
YDB48
ZDW2DUP(?
rdb?
MOVAL,W
SUBAL,X;
W-X->
AL
CBW
MOVBL,10
IDIVBL;
(W-X)/10->
MOVr,AH;
(W-X)%10->
r
MOVBL,Y
IMULBL;
(W-X)/10*Y->
AX
MOVBX,AX
IMULBX;
((W-X)/10*Y)^2->
DX,AX
MOVZ,AX
MOVZ+2,DX;
Z
3.15有两个压缩型BCD码相加,被加数(6756)和加数(7321)存放在数据段的BUFFER变量的4个连续的字节存储单元中,结果(和)存放在RESUT变量的三个字单元中(考虑到有进位的情况),编制具有数据段和代码段结构的完整程序,程序中需要作必要的注释。
结果存放在RESUT字节变量中,三个字单元不知要求怎么用
BUFFERDB67H,56H,73H,21H
RESUTDB3DUP(?
MOVAL,BUFFER+1;
第一个数据低两位->
AL
MOVBL,BUFFER+3;
第二个数据低两位->
BL
ADDAL,BL;
低两位相加
DAA;
十进制调整(什么指令?
?
MOVDL,AL;
低两位相加结果放到DL
MOVAL,BUFFER;
第一个数据高两位->
MOVBL,BUFFER+2;
第二个数据高两位->
ADCAL,BL;
DAA;
十进制调整
MOVBL,0
JNCHCF;
条件跳转指令,当CF=0时,跳转到标号处(就是有进位时)
INCBL
HCF:
MOVRESUT,BL;
存放最高位
MOVRESUT+1,AL;
存放中间两位
MOVRESUT+2,DL;
存放最低两位
END
START
3.16将SRCBUF变量定义的80个字符串传送到DSTBUF变量定义的存储区去。
当遇到0DH时,不将此字符传送到DSTBUF变量中去。
试编写程序,并加以注释。
SRCBUFDB'
aaa'
0DH,'
bbb'
DSTBUFDB80DUP(?
MOVCX,07;
比较次数->
CX
MOVSI,0;
源串指针->
SI
MOVDI,0;
目标串指针->
DI
SDCMP:
MOVAL,SRCBUF[SI]
CMPAL,0DH
JZNSEND
MOVDSTBUF[DI],AL;
不等于0DH,保