1、汇编语言程序设计1第五章 汇编语言程序设计1从4000H单元开始定义数据段如下,请画出所定义存储器的分配图。 BUF SEGMENT DAl DW 3456H DA2 DB 2 DUP(7,8) BUF ENDS答:存储器的分配图2对于习题1的定义,请说明下列每条指令执行后的结果。 1、 MOV AX,SEG DAl 2、MOV AX,SEG DA2 3、MOV BX,OFFSET DAl 4、MOV BX,OFFSET DA2 5、MOV CX,TYPE DAl 6、MOV CX,TYPE DA2 7、MOV DX,LENGTH DAl 8、MOV DX,LENGTH DA2 9、MOV A
2、X,SIZE DAl 10、MOV AX,SIZE DA2答:1、(AX)=(DS) 2、(AX)=(DS)+2 3、(BX)=4000H 4、(BX)=4002H 5、(CX)=2 6、(CX)=1 7、(DX)=2 8、(DX)=4 9、(AX)=2 10、(AX)=4 3已知数据定义如下,请计算变量PL的值是多少? DATA DB AB DATAl DB 10 DUP(?) PL EQU $-DATA答:PL=DATA+12-DATA=124已知A25、B15、C4,请计算下列表达式的值。 (1) A 50+B (2) A MOD C+B (3)(A+4)B-3 (4) B3 MOD 4
3、 (5)A LE B (6) A XOR 50答:(1) A 50+B= 25 50+15=1250+15=12515 (2) A MOD C+B=25 MOD 4+15=1+15=16 (3)(A+4)B-3 =(25+4)15-3 =1500-3=1497 (4) B3 MOD 4 =15/3 MOD 4 =5 MOD 4 =1 (5)A LE B =25 LE 15 = 0 (6) A XOR 50 = 25 XOR 50 = 435已知内存DATA单元存放一个字数据,请统计其中含有0的个数,并送人RESULT单元的程序。答:程序如下:DATA1 SEGMENTDATA DW 1234h
4、COUNT DB 0DATA1 ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA1START: MOV AX,DATA1 MOV DS,AX MOV AX,DATA MOV CX,16LOP: TEST AX,8000H JNZ NEXT INC RESULTNEXT: ROL AX,1 LOOP LOP INT 3CODE ENDS END START6已知从数据段TAB单元开始,顺序存放十六进制数0F的ASCII码,寄存器AL中的高四位二进制数是0、低四位是1。 请设计程序:用查表指令(XLAT)将寄存器AL中低四位的十六进制数转换为ASCII码。答:DATA
5、 SEGMENT TAB DB 0123456789ABCDEF DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA BX,TAB XLAT INT 3CODE ENDS END START 7已知从数据段BUF单元开始存放一个三字节的带符号数,请设计对其求补的程序。 答:DATA SEGMENT BUF DB 97H,87H,9AHRES DB 3 DUP(?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MO
6、V DS,AX LEA BX,BUF LEA SI,RES MOV CX,3LOP: MOV AL,BX XOR AL,0FFH MOV SI,AL LOOP LOP CLC LEA SI,RES MOV CX,3LOP1: MOV AL,SI ADC AL,0 MOV SI,AL LOOP LOP1 INT 3CODE ENDS END START 8已知从数据段BUF单元开始存放字节型的带符号数X和Y,请设计计算Y6X+8的程序。答:DATA SEGMENT BUF DB 97H,87H ;X=97H和Y=87HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS
7、:DATASTART: MOV AX,DATA MOV DS,AX MOV AH,0 MOV AL,BUF SHL AX,1 MOV BX,AX SHL AX,1 ADD AX,BX ADD AX,8 MOV BUF+1,AL MOV BUF+2,AH INT 3CODE ENDS END START 9已知X、Y是字节型的无符号数,请设计程序计算: X4 (0x10) Y X-10 (10X20) 答:程序如下:DATA SEGMENTX DB 84HY DB 0DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MO
8、V DS,AX MOV AL,X CMP AL,10 JAE NEXT SHR AL,1 SHR AL,1 JMP ENNEXT: SUB AL,10 EN: MOV Y,AL INT 3CODE ENDS 10已知从数据段BUF单元开始存放15个字节型数据,请设计程序将其中负数和零分别送往MINUS和ZERO开始的存储器单元。答:程序如下: DATA SEGMENT BUF DB 15DUP(?) MINUS DB 15 DUP(?) ;存放负数 ZERO DB 15 DUP(?) ;存放0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ORG
9、100H START: MOV AX,DATA MOV DS,AX LEA BX,BUF MOV CX,15 LEA SI,MINUS LEA DI,ZERO LOP: MOV AL,BX CMP AL,0 JGE PZ MOV SI,AL INC SI JMP NEXT PZ: JG NEXT MOV DI,AL INC DI JMP NEXT NEXT: INC BX LOOP LOP INT 3 CODE ENDS END START 12编一程序将字符串STR(长度20字节)中所有&用$代替。答:程序如下:DATA SEGMENTSTR DB G674GH&6TR677&74Y&98D
10、ATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA BX,STR MOV CX,20LOP: MOV AL,BX CMP AL,& JNZ NEXT MOV AL,$ MOV BX,ALNEXT: INC BX LOOP LOP INT 3CODE ENDS END START13请设计程序,将存储器单元22002210H清0、2250H2260H置1、22AOH 22BOH置55H。要求写出主程序和子程序。解:程序如下: DATA SEGMENTBUF1 EQU 2200HBUF2 EQU 2
11、200HBUF3 EQU 2200HDATA ENDSSTACK SEGMENT DB 20 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKBEG PROC FARSTART: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX LEA BX,BUF1MOV AL,0CALL FMOVLEA BX,BUF2MOV AL,1CALL FMOVLEA BX,BUF3MOV AL,55HCALL FMOV RETSTART ENDPFMOV PROC NEAR MOV CX,16 LOP:
12、 MOV BX,AL INC BX LOOP LOP RETFMOV ENDPCODE ENDS END BEG14编写程序,要求: (1)键盘键入两个字符串STRING1和STRING2 (2)比较两串所含字符是否完全相同,若相同则显示MATCH,若不相同则显示 NOMATCH。解:程序如下: DATA SEGMENTSTRING1 DB 10 DB ? DB 10 DUP(?) STRING2 DB 10 DB ? DB 10 DUP(?)XT DB MATCH,13,10,$ BXT DB NO MATCH,13,10,$DATA ENDSCODE SEGMENT ASSUME CS:C
13、ODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA DX,STRING1 MOV AH,10 INT 21H LEA DX,STRING2 MOV AH,10 INT 21H MOV AL,STRING1+1 CMP AL,STRING2+1 JNZ BD LEA SI,STRING1+2 LEA DI,STRING2+2 MOV CH,0 MOV CL,ALLOP: MOV AL,SI CMP AL,DI JNZ BD INC SI INC DI LOOP LOP LEA DX,XT JMP DO1BD: LEA DX,BXTDO1: MOV AH,9 I
14、NT 21H MOV AH,4CH INT 21HCODE ENDS END START第六章 存储器1计算机的内存和外存有什么区别?答:内存储器(主存储器)用来存放当前机器运行的程序和数据,它是计算机主机的一部分,一般把具有一定容量且速度较高的存储器作为内存储器,CPU可直接用指令对内存储器进行读写。在微机中通常用半导体存储器作为内存储器。 外存储器用来存放当前暂时不用的程序和数据。外存储器是存储容量大、速度较低、位于主机之外的存储器。CPU不能直接用指令对外存储器进行读写。 要使用外存储器中的信息,必须先将它调入内存储器。2计算机的三级存储系统是什么?解决了什么实际问题?答:在现代微机中同
15、时采用这两种存储层次,构成cache内存外存三级存储系统。这三级存储系统的形成,满足了现代微型计算机对存储系统的速度快、容量大且价格低廉的要求。cache内存存储系统解决了速度与成本的矛盾。cache内存外存三级存储系统解决了存储器的大容量和低成本之间的 矛盾。3半导体存储器有哪些优点?SRAM、DRAM各有何特点?SRAM的某一单元中存放一个数据,如05H,CPU将其取走后,该单元的内容是什么?答:半导体存储器有易读易写、体积小、集成度高、速度快的优点。 DRAM的特点是必须定时刷新、集成度高、功耗低、价格便宜。 该单元的内容是05H(不变)4ROM、PROM、EPROM、E2PROM各有何
16、特点?各用于何种场合?答:掩膜式ROM 用定作掩膜对存储器进行编程,一旦制造完毕,内容固定不能改变。适合批量生产,但不适用于科研工作。 可编程式的ROM(PROM) PROM允许用户一次性写入,再也不可更改。因此,不适用于科研。 可擦除式的ROM(EPROM) EPROM允许用户多次写入信息,写入操作由专用的写入设备完成。写入之前应先擦除原来写人的信息。一种擦除方式为紫外光擦除,用紫外光照射15分钟左右,芯片中的信息被擦除,成为一块“干净”的EPROM,可再次写入信息。电擦除式的ROM(E2PROM),即用特定的电信号对其进行擦除,可在线操作,因此很方便。它的特点是写入时电压要求较高(一般为2
17、0V25V),写入速度较慢而不能像RAM那样作随机存取存储器使用。5EPROM存储器芯片还没有写入信息时,各单元的内容是什么?使用EPROM时应注意什么?答:FFH 对EPROM的擦除和写入都有专用设备,写入之前应确保芯片是“干净”的,即为全1状态。EPROM写入器(或称编程器)一般可对多种型号的EPROM芯片进行写入。通过读写芯片的识别码来确认该使用什么样的编程脉冲和编程电压。写入器由软件和硬件两部分组成,常与计算机配套工作。6若用4Kl位的RAM芯片组成16K8位的存储器,需要多少芯片?A19A0地址线中哪些参与片内寻址?哪些作为芯片组的片选信号?答:16K8/4Kl=48=228=32片
18、 需要32片 4K=22 210=212 12根地址线 A11A0 22 2根地址线 A13A127下列RAM各需要多少条地址线进行寻址?各需要多少条数据IO线? (1)512K4 (2)1K8 (3)16K4 (4)64Kl答:(1)512K4 512K=29210=219 19根地址线 4 4根数据线(2)1K8 1K=20210=210 10根地址线 8 8根数据线(3)16K4 16K=24210=214 14根地址线 4 4根数据线(4)64Kl 64K=26210=216 16根地址线 1 1根数据线8已知某微机控制系统中的RAM容量为4K8位,首地址为4800H,求其最后一个单元
19、的地址。答:最后一个单元的地址-首地址+1=4KB=212=1000H最后一个单元的地址=4800H+1000H-1=57FFH9设有一个具有14位地址和8位数据的存储器,问 (1)该存储器能存储多少字节的信息? (2)如果存储器由8K4位RAM芯片组成,需要多少片? (3)需要多少位地址用于芯片选择?答:(1)存储器的容量=2148=16K8=16KB 214个字节(16384个)(2) 16K8/8K4=22=212=4片(3) 21 1根地址线 A1310若用2114芯片组成2KBRAM,地址范围为3000H37FFH,问地址线应如何连接?(假设CPU只有16条地址线、8条数据线,可用线
20、选法和全译码法。)答:2114芯片 1K42KB =2K8/1K4=28=218=16片 需要16片 1K=20 210=210 10根地址线 A9A0线选法: 21 1根地址线 A10 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 3000H 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 33FFH 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 3400H 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 37FFH
21、全译码法: 16-10=6 A15A10 G2B C B AA15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 3000H 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 33FFH 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 3400H 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 37FFH11选用存储芯片和译码芯片,构成其起始地址为的一个的存储子系统(假设CPU只有16条地址线、8条数据线,用全译码法。) 答:6116 2K8 2KB =2K8/2K8=11=201=1片 需要1片 2K=21 210=211 11根地址线 A10A0全译码法: 16-11=5 A15A11 G2A G2B C B AA15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 C000H 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 C7FFH