MEM1 DW 1122H,3344H MEM2 DW 5566H,7788H SUM DW 2 DUP(?) DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX LEA BX,MEM1 LEA SI,MEM2 LEA DI,SUM MOV CL,2 CLC
AGAIN: MOV AX,[BX] ADC AX,[SI] MOV [DI],AX ADD BX,2 ADD SI,2 ADD DI,2 LOOP AGAIN HLT
CSEG ENDS END START
4.4试编写程序,测试AL寄存器的第4位(bit4)是否为0?
解: 测试寄存器AL中某一位是否为0,可使用TEST指令、AND指令、移位指令等几种方法实现。 如:TEST AL,10H JZ NEXT . . .
NEXT:…
或者: MOV CL,4 SHL AL,CL JNC NEXT .
NEXT:…
4.5 试编写程序,将BUFFER中的一个8位二进制数转换为ASCII码,并按位数高低顺序存放在ANSWER开始的内存单元中。 解:
DSEG SEGMENT BUFFER DB ?
ANSWER DB 3 DUP(?) DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX
MOV CX,3 ;最多不超过3为十进制数(255) LEA DI, ANSWER ;DI指向结果存放单元 XOR AX,AX
MOV AL,BUFFER ;取要转换的二进制数 MOV BL,0AH ;基数10
AGAIN:DIV BL ;用除10取余的方法转换 ADD AH,30H ;十进制数转换成ASCII码 MOV [DI], AH ;保存当前的结果 INC DI ;指向下一个位保存单元
AND AL,AL ;商为0?(转换结束?) JZ STO ;若结束,退出 MOV AH,0
LOOP AGAIN ;否则循环继续 STO: MOV AX,4C00H INT 21H ;返回DOS CSEG ENDS END START
4.6 假设数据项定义如下:
DATA1 DB ?HELLO !GOOD MORNING !? DATA2 DB 20 DUP(?)
用串操作指令编写程序段,使其分别完成以下功能: (1)从左到右将DATA1中的字符串传送到DATA2中。 (2)传送完后,比较DATA1和DATA2中的内容是否相同。 (3)把DATA1中的第3和第4个字节装入AX。
(4)将AX的内容存入DATA2+5开始的字节单元中。 解: (1)
MOV AX,SEG DATA1 MOV DS,AX
MOV AX,SEG DATA2 MOV ES,AX LEA SI,DATA1 LEA DI,DATA2 MOV CX,20 CLD
REP MOVSB (2)
LEA SI,DATA1 LEA DI,DATA2 MOV CX,20
CLD
REPE CMPSB 。。。 (3)
LEA SI,DATA1 ADD SI,2 LODSW
(4)LEA DI,DATA2 ADD DI,5 STOSW
4.7执行下列指令后,AX寄存器的内容是多少? TABLE DW 10,20,30,40,50 ENTRY DW 3 . . .
MOV BX,OFFSET TABLE ADD BX,ENTRY MOV AX,[BX] 解:(AX)=1E00H 4.8 编写程序段,将STRING1中的最后20个字符移到STRING2中(顺序不变)。 解:首先确定STRING1中字符串的长度,因为字符串的定义要求以‘$’符号结尾, 可通过检测‘$’符确定出字符串的长度,设串长度为COUNT,则程序如下: LEA SI,STRING1 LEA DI,STRING2 ADD SI,COUNT-20 MOV CX,20 CLD
REP MOVSB
4.9 假设一个48位数存放在DX:AX:BX中,试编写程序段,将该48位数乘以2. 解: 可使用移位指令来实现。首先将BX内容逻辑左移一位,其最高位移入进位位CF,之后AX内容带进位位循环左移,使AX的最高位移入CF,而原CF中的内容(即BX的最高位)移入AX的最低位,最后再将DX内容带进位位循环左移一位,从而实现AX的最低位移入DX的最低位。 SHL BX,1 RCL AX,1 RCL DX,1
4.10 试编写程序,比较AX,BX,CX中带符号数的大小,并将最大的数放在AX中。
解:比较带符号数的大小可使用符号数比较指令JG等。 CMP AX,BX JG NEXT1
XCHG AX,BX
NEXT1:CMP AX,CX
JG STO
MOV AX,CX STO:HLT
4.11 若接口03F8H的第1位(b1)和第3位(B3)同时为1,表示接口03FBH有准备好的8位数据,当CPU将数据取走后,b1和b3就不再同时为1了。仅当又有数据准备好时才再同时为1。
试编写程序,从上述接口读入200字节的数据,并顺序放在DATA开始的地址中。
解:即当从输入接口03F8H读入的数据满足ⅹⅹⅹⅹ1ⅹ1ⅹB时可以从接口03FBH输入数据。 LEA SI,DATA MOV CX,200
NEXT: MOV DX,03F8H WAIT: IN AL,DX
AND AL,0AH ;判断b1和b3位是否同时为1 CMP AL,0AH
JNZ WAIT ;b1和b3位同时为1则读数据,否则等待 MOV DX,03FBH IN AL,DX MOV [SI],AL INC SI
LOOP NEXT HLT
4.12 画图说明下列语句分配的存储空间及初始化的数据值。 (1)DATA1 DB ?BYTE?,12,12H,2 DUP(0,?,3) (2)DATA2 DW 4 DUP(0,1,2),?,-5,256H 解: (1) 存储空间分配情况如图(a)所示。 (2) 存储空间分配情况如图(b)所示。
第5章存储器系统
5.1 内部存储器主要分为哪两类? 它们的主要区别是什么? 解: (1)分为ROM 和 RAM 。 (2)它们之间的主要区别是:
ROM在正常工作时只能读出,不能写入。RAM则可读可写。 断电后,ROM中的内容不会丢失,RAM中的内容会丢失。 5.2 为什么动态RAM需要定时刷新?
解:DRAM的存储元以电容来存储信息,由于存在漏电现象,电容中存储的电荷会逐渐泄漏,从而使信息丢失或出现错误。因此需要对这些电容定时进行“刷新”。 5.3 CPU寻址内存的能力最基本的因素取决于___________。 解:地址总线的宽度。
5.4 试利用全地址译码将6264芯片接到8088系统总线上,使其所占地址范围为32000H~33FFFH。
解:将地址范围展开成二进制形式如下图所示。