1、2.3 设AX=1122H、BX=3344H、CX=5566H、SS=095BH、 SP=40H,下述程序执行后AX、BX、CX、DX等通用寄存器的 内容各是多少? 画出堆栈存储器的逻辑地址及其存储内容和SP 指向的示意图。 PUSH AX PUSH BX PUSH CXPOP BXPOP AXPOP DX,堆栈存储器的逻辑地址、堆栈指示器的指向及栈区的内容如图所示。 四个通用寄存器的内容如下: BX=5566H AX=3344H CX=5566H DX=1122,2.4 设SP=0040H,如果用进栈指令存入5个数据,则SP= , 若又用出栈指令取出2个数据,则SP= 。,解:存入5个数据需
2、要占用10个字节,SP10,所以 SP0040H0AH0036H。 取出2个数据,让出4个字节,SP4,所以 SP0036H04H003AH。 所以,如果用进栈指令存入5个数据,则SP= 0036H , 若又用出栈指令取出2个数据,则SP= 003AH。,2.8 AX中有一负数,欲求其绝对值。若该数为补码,则用指令; 若该数为原码,则用指令。,NEG AX,AND AX,7FFFH,2.9 分别写出实现如下功能的程序段:(1)将AX中间八位,BX低四位, DX高四位拚成一个新字。,MOV CL,4SHL AX,CLSHL BL,CLMOV AL,BLSHR DH,CLOR AL,DH,(2)将
3、CX中间八位取反其余位不变。 解:方法1:方法2:,XOR CX,0FF0H,MOV AX,CXMOV CL,4ROR AX,CLNOT ALROL AX,CLMOV CX,AX,(3)对数据段中以BX为偏移地址的连续三单元中的无符号数求和。,MOV AL,BXMOV AH,0ADD AL,BX+1ADC AH,0ADD AL,2 BXADC AH,0,(4)将数据段中以BX为偏移地址的 连续四单元的内容颠倒过来。 方法1:,MOV AL,BXXCHG AL,3 BXMOV BX,ALMOV AL,1BXXCHG AL,2BXMOV 1BX,AL,方法2:MOV AX,BXXCHG AH,2B
4、XXCHG AL,3BXMOV BX,AX,(5)将BX中的四位BCD数用非压缩 BCD数按序放在AL、BL、CL和DL中。,MOV DX,BXMOV CL,4SHR BX,CLAND BL,0FHAND DX,0F0FHMOV AL,BHMOV CL,BLMOV BL,DH,2.10 一数据段定义为: DATA SEGMENT S1 DB 0,1,2,3,4,5 S2 DB 12345 COUNT EQU $S1 NB DB 3 DUP (2) NW DW 120,256 PW DW 1 DATA ENDS,(1)画出该数据段中数据的存储形式数据的存储形式如下图所示。,(2)在下表中填写各变
5、量的偏移地址 和各变量的值。,各变量的偏移地址和各变量的值如下表:,(3)填写表中程序段各指令执行后, 目的寄存器的值,并指出源操作数 所使用的寻址方式 目的寄存器的值以及源操作数 所使用的寻址方式如下表:,(4)改正下列程序段中不正确指令的错误:a. MOV AX,S1 MOV AL,S1 b. MOV BP,OFFSET S2MOV CL,BP MOV CL,DS:BP c. MOV SI,OFFSET NBMOV SI, + MOV BYTE PTR SI, + d. MOV DL,NW+2 MOV DX,NW+2 e. MOV DI,CH MOV DI, CHf. MOV BX,OFF
6、SET S1MOV DH,BX+3 MOV DH, 3BX g. INC COUNT 立即数不能增1 h. MOV NB,S2 通过8位寄存器中转i. MOV AX,BX+S1 MOV AL,S1BX j. ADD AX, DX+NW ADD AX,NWDI,2.11 编写程序将双字变量FIRST中的 无符号数乘以4后存入字节变量 SECOND数据区中。 解:编制的程序段如下:FIRST DD 0A46E5F90H SECOND DB 5 DUP(0),MOV AX, WORD PTR FIRST MOV DX, WORD PTR FIRST+2 MOV SECOND+4, 0 SHL AX,
7、 1 RCL DX, 1 RCL SECOND+4, 1 SHL AX, 1 RCL DX, 1 RCL SECOND +4, 1 MOV WRORD PTR SECOND, AX MOV WORD PTR SECOND +2, DX,2.12 编写程序将双字变量FIRST中的 补码数除以4后存入字节变量THIRD 数据区中。 解:编制的程序段如下: FIRST DD 0A46E5F90H THIRD DB 4 DUP(0),MOV AX, WORD PTR FIRST MOV DX, WORD PTR FIRST+2 SAR DX, 1 RCR AX, 1 SAR DX, 1 RCR AX,
8、 1 MOV WORD PTR THIRD, AX MOV WORD PTR THIRD+2, DX,2.13 编写程序将双字变量FIRST 中的补码数求补以后存入字节变量 FORTH数据区中。 解:编制的程序如下: FIRST DD 0A46E5F90H FORTH DB 4 DUP(0),MOV AX, WORD PTR FIRST NOT AXMOV WORD PTR FORTH, AXMOV AX, WORD PTR FIRST+2NOT AXMOV WORD PTR FIRTH+2, AXADD WORD PTR FORTH, 1ADC WORD PTR FORTH+2, 0,2.1
9、4 阅读如下源程序,画出程序 在9号功能调用之前数据段的 内存映象图并指出此程序的功能。BUF DB 78H OBUF1 DB 0AH,0DH,(BUF)= OBUF2 DW 2 DUP(0),MOV AL,BUF MOV AH,AL MOV CL,4 SHR AH,CL ADD AH,30H AND AL,0FH ADD AL,30H XOR BX,BX XCHG AH,AL MOV OBUF2BX,AX MOV OBUF2BX+2,$H MOV DX,OFFSET OBUF1 MOV AH,9 INT 21H,数据段的内存映象图如下图所示:,该程序的功能是将字节变量BUF中的 两位BCD数以十六进制数形式显示出来 具体显示是在下一行的行首显示 (BUF)=78H。,