所有十二种寻址方式必须必须必须牢牢记住,按照以往的经验是百分百会考,20分;指出程序的错误,百分百会考,16或者20分;说明程序的功能,课后习题就三四道,一定会考至少一到两道题,5-10分;应该会有补充程序题,也是课后题,所以就自己多注意。选择题和最后的编程就看自己的本事了。
红色黄底的必须全部记住,死死地,百分百保证记住,标红的也要全部记住,必须全部记住。后边没标红的程序,一般会考两道程序题,但是不敢确定是哪几道,所以程序题属于看自己的水平,能记住的就多记几道,否则自求多福。学霸自重!
我这只是当时的复习内容,现在一定要对一下有没有漏掉的,自行补充。或者找一个比较认真的同学整理一份大家共享。
2.3 在IBM PC机的存储器中存放信息如右下图所示。试读出30022H和30024H字节单元的
内容,以及30021H和30022H字单元的内容。
答:30022H字节单元的内容为ABH;30024H字节单元的内容为EFH。30021H字单元
的内容为AB34H;30022H字单元的内容为CDABH。 存储器 2.4 在实模式下,段地址和偏移地址为3017:000A的存储单元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢?
答:3017:000A、3015:002A和3010:007A的存储单元的物理地址都是
3017AH。
30020H 30021H 30022H 30023H 30024H 12H 34H ABH CDH EFH
2.6 在实模式下,存储器中每一段最多可有10000H个字节。如果用调试程序
DEBUG的r命令在终端上显示出当前各寄存器的内容如下,请画出此时
2.3题的信息存放情况 存储器分段的示意图,以及条件标志OF、SF、ZF、CF的值。 10E40 10F40 数据段 C>debug
20E40 -r 附加段 20F40
AX=0000 BX=0000 CX=0079 DX=0000 SP=FFEE BP=0000
21F00 SI=0000 DI=0000 DS=10E4 ES=10F4 SS=21F0 CS=31FF
堆栈段 IP=0100 NV UP DI PL NZ NA PO NC
31F00
答:此时存储器分段的示意图如右图所示。OF、SF、ZF、CF的值都
31FF0
为0。 代码段
41FF0
3.2 试根据以下要求写出相应的汇编语言指令
(1) 把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。 2.6 题的存储器分段示意图 (2) 用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。
(3) 用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相
加,并把结果送回存储器中。
(4) 用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回存储单元中。
(5) 把数0B5H与(AL)相加,并把结果送回AL中。 答:(1) ADD DX, BX
(2) ADD AL, [BX][SI] (3) ADD [BX+0B2H], CX
(4) ADD WORD PTR [0524H], 2A59H (5) ADD AL, 0B5H
3.3 写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。要求使用以下几
种寻址方式:
(1) 寄存器间接寻址 (2) 寄存器相对寻址 (3) 基址变址寻址
答:(1) MOV BX, OFFSET BLOCK
ADD BX, (6–1)*2
MOV DX, [BX]
(2) MOV BX, OFFSET BLOCK MOV DX, [BX+(6–1)*2] BLOCK[BX]
(3) MOV BX, OFFSET BLOCK MOV SI, (6–1)*2 MOV DX, [BX][SI]
3.4 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,
(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器的内容。 (1) MOV AX, 1200H (AX)=1200H (2) MOV AX, BX (AX)=0100H (3) MOV AX, [1200H] (AX)=4C2AH (4) MOV AX, [BX] (AX)=3412H (5) MOV AX, 1100[BX] (AX)=4C2AH (6) MOV AX, [BX][SI] (AX)=7856H (7) MOV AX, 1100[BX][SI] (AX)=65B7H 3.8 假定(DS)=2000H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)=0100H,(BP)=0010H,
数据段中变量名VAL的偏移地址为0050H,试指出下列源操作数字段的寻址方式是什么?其物理地址值是多少? (1) MOV AX, 0ABH (2) MOV AX, BX (3) MOV AX, [100H] (4) MOV AX, VAL (5) MOV AX, [BX] (6) MOV AX, ES:[BX] (7) MOV AX, [BP] (8) MOV AX, [SI] (9) MOV AX, [BX+10] (10) MOV AX, VAL[BX] (11) MOV AX, [BX][SI] (12) MOV AX, VAL[BX][SI] 答:(1) 立即方式; 操作数在本条指令中
(2) 寄存器寻址方式; 操作数为 (BX)=0100H (3) 直接寻址方式; PA=20100H (4) 直接寻址方式; PA=20050H (5) BX寄存器间接寻址方式; PA=20100H (6) 附加段BX寄存器间接寻址方式; PA=21100H (7) BP寄存器间接寻址方式; PA=15010H (8) SI寄存器间接寻址方式; PA=200A0H (9) BX寄存器相对寻址方式; PA=20110H (10) BX寄存器相对寻址方式; PA=20150H (11) BX和SI寄存器基址变址寻址方式; PA=201A0H
改为: MOV BX, (6-1)*2 也可 MOV
DX,
(12) BX和SI寄存器相对基址变址寻址方式; PA=201F0H
3.10 在ABLE为数据段中0032单元的符号名,其中存放的内容为1234H,试问以
TABLE 0AH 下两条指令有什么区别?指令执行完后AX寄存器的内容是什么?
00H MOV AX, TABLE
14H LEA AX, TABLE
TABLE+3 00H 答:MOV AX, TABLE是将TABLE单元的内容送到AX,(AX)=1234H
1EH
LEA AX,TABLE是将TABLE单元的有效地址送到AX,(AX)=0032H
00H
3.11执行下列指令后AX寄存器中的内容是什么? 28H
00H TABLE DW 10, 20, 30, 40, 50 ;000AH, 0014H, 001EH, 0028H, 0032H
32H ENTRY DW 3
00H ┇
3.11题的TABLEMOV BX, OFFSET TABLE
存储方式 ADD BX, ENTRY
MOV AX, [BX]
答:(AX)=1E00H (TABLE的存储方式如右图所示) 3.12 下列ASCII码串(包括空格符)依次存储在起始地址为CSTRING的字节单元中:
CSTRING DB ‘BASED ADDRESSING’
请编写指令将字符串中的第1个和第7个字符传送给DX寄存器。 答:MOV DH, CSTRING
MOV DL, CSTRING+7-1 3.25 试用移位指令把十进制数+53和-49分别乘以2。它们应该用什么指令?得到的结果是
什么?如果要除以2呢? 答:MOV AL, 53
SAL AL, 1 ;(AL)=(+53*2)=6AH MOV AL, -49 SAL AL, 1 ;(AL)=(-49*2)=9EH MOV AL, 53 SAR AL, 1 ;(AL)=(53/2)= 1AH MOV AL, -49 SAR AL, 1 ;(AL)=(-49/2)=0E7H 3.26试分析下面的程序段完成什么功能? MOV CL, 04 SHL DX, CL MOV BL, AH SHL AX, CL SHR BL, CL OR DL, BL
答:本程序段将 ((DX),(AX)) 的双字同时左移4位,即将此双字乘以10H (16)。 3.30编写程序段,把字符串STRING中的‘&’字符用空格符代替。
STRING DB ‘The date is FEB&03’ 答:程序段如下:
MOV CX, 18
MOV CLD MOV MOV LEA REPNE JNE DEC MOV NEXT:
AL, ‘&’
DI, SEG STRING ES, DI
DI, STRING SCASB NEXT DI
ES:BYTE PTR [DI], ‘ ’ ┇
;送空格符
3.32 编写一程序段:比较两个5字节的字符串OLDS和NEWS,如果OLDS字符串不同于
NEWS字符串则执行NEW_LESS;否则顺序执行程序。 答:程序段如下:
MOV CX, 5 CLD
MOV DI, SEG OLDS MOV DS, DI MOV ES, DI LEA SI, OLDS LEA DI, NEWS REPE CMPSB JNE NEW_LESS
┇
NEW_LESS: ┇ 3.36 假设X和X+2单元的内容为双精度数p,Y和Y+2单元的内容为双精度数q,(X和Y为低位字)试说明下列程序段做什么工作?
MOV DX, X+2 MOV AX, X ADD AX, X ADC DX, X+2 CMP DX, Y+2 JL L2 JG L1 CMP AX, Y JBE L2
L1: MOV AX, 1
JMP SHORT EXIT
L2: MOV AX, 2 EXIT:INT 20H
答:此程序段判断p*2>q,则使(AX)=1后退出;p*2≤q,则使(AX)=2后退出。 4.1 指出下列指令的错误:
(1) MOV AH, BX ;寄存器类型不匹配 (2) MOV [BX], [SI] ;不能都是存储器操作数 (3) MOV AX, [SI][DI] ;[SI]和[DI]不能一起使用
(4) MOV MYDAT [BX][SI], ES:AX (5) MOV BYTE PTR [BX], 1000 (6) MOV BX, OFFSET MYDAT [SI]
用OFFSET
(7) MOV CS, AX (8) MOV ECX, AX 答:见注释。
;AX寄存器不能使用段超越 ;1000超过了一个字节的范围
;MYDAT [SI]已经是偏移地址,不能再使;CS不能用作目的寄存器 ;两个操作数的数据类型不同
4.7请设置一个数据段DATASG,其中定义以下字符变量或数据变量。
(1) FLD1B为字符串变量:‘personal computer’; (2) FLD2B为十进制数字节变量:32; (3) FLD3B为十六进制数字节变量:20; (4) FLD4B为二进制数字节变量:01011001;
(5) FLD5B为数字的ASCII字符字节变量:32654; (6) FLD6B为10个零的字节变量;
(7) FLD7B为零件名(ASCII码)及其数量(十进制数)的表格:
PART1 20 PART2 50 PART3 14
(8) FLD1W为十六进制数字变量:FFF0; (9) FLD2W为二进制数的字变量:01011001; (10) FLD3W为(7)零件表的地址变量;
(11) FLD4W为包括5个十进制数的字变量:5,6,7,8,9; (12) FLD5W为5个零的字变量;
(13) FLD6W为本段中字数据变量和字节数据变量之间的地址差。 答:DATASG SEGMENT
FLD1B DB ‘personal computer’ FLD2B DB 32 FLD3B DB 20H FLD4B DB 01011001B FLD5B DB ‘32654’ FLD6B DB 10 DUP (0) FLD7B DB ‘PART1’, 20
DB ‘PART2’, 50 DB ‘PART3’, 14
FLD1W DW 0FFF0H FLD2W DW 01011001B FLD3W DW FLD7B FLD4W DW 5, 6, 7, 8, 9 FLD5W DW 5 DUP (0)
FLD6W DW FLD1W-FLD1B
DATASG ENDS 4.9有符号定义语句如下:
BUFF DB 1, 2, 3, ‘123’ EBUFF DB 0