1 .假设寄存器AX=1234H,DX=0A000H
MOV BX,0 MOV CX,BX SUB CX,AX SBB BX,DX MOV AX,CX MOV DX,BX
上述程序段执行后AX= 0FDCFH ,DX= 60000H
程序功能是 对原AX、DX中的值求补码,因为取补码指令就相当于用0减去此操作数,见书本P122 .
4.分析下面程序段, MOV AL,200 SAR AL,1 MOV BL,AL MOV CL,2 SAR AL,CL ADD AL,BL
试问程序段执行后(BL)=11100100B=_E4H_(AL)=11111001B=F9H
5.程序段如下:
BLK1 DB 46,84,34,-5,20,122,73 :
MOV CX,7 LEA S1,BLK1
NEXT: MOV AL,[SI] INC SI
TEST AL,81H LOOPZ NEXT MOV BL,[SI] :
请回答程序段运行后:(AL)=_____46_______ (BL)=____84________
14.对于下面的数据定义,各条MOVE指令单独执行后,有关寄存器的内容是什么? FLDB DB
TABLEA DW 20DUP(?)
TABLEB DB ‘ABCD’ 解答:
MOVE AX,TYPE FLDB AX=0001H MOVE AX,TYPE TABLEA AX=0002H MOVE CX,LENGTH TABLEA CX=0014H MOVE DX,SIZE TABLEA DX=0028H
11
MOVE CX,LENGTH TABLEB CX=0001H。
19.读下面程序段,请问:在什么情况下,本段程序的执行结果是AH=0? BEGIN: IN AL,5FH TEST AL,80H JZ BRCHl MOV AH,0 JMP STOP BRCHl: MOV AH,0FFH STOP: HLT
解答:AL中的最高位为1时。 20.读程序:
START: IN AL,20H MOV BL,AL IN AL,30H MOV CL,AL MOV AX,0 ADLOP: ADD AL,BL ADC AH,0 DEC CL JNZ ADLOP HLT
请问: (1)本程序实现什么功能?(2)结果在哪里? 解答:完成20H*30H,结果在AX中。
21.请编一程序段完成AX*l0的任务(要求不准用乘法指令做)。 解答: MOV BX,AX MOV CL 2 SHL AX, CL ADD AX,BX SHL AX ,1 22.编程序使:
(1)AX寄存器低4位清零。 (2)BX寄存器低4位置“1”。 (3)CX寄存器低4位变反。
(4)用TEST指令测试DL寄存器位3、位6是否同时为0,若是,将0送DL;否则l送DH。 解答 :1,AND AX ,0FFF0H 2,OR BX ,000FH 3,XOR CX ,000FH 4,TEST DL ,48H JZ LOOP MOV DH,1 HLT
LOOP :MOV DL ,0 HLT
12
23.编一程序段,完成符号函数(-128≤x≤127): 1 (x.>0)
y= 0 (x=0) -1 (x<0) 假设x的值存放在DATAl中,y的值存放在DATA2中。 解答: START :MOV AL ,DATA1 AND AL,AL JGE BIGR MOV AL,0FFH MOV DATA2.AL HLT
BIGR:JE EQUL MOV AL,1 MOV DATA2,AL HLT
EQUL:MOV DATA2,AL HLT
24.设AX寄存器中有一个16位二进制数,编一程序,统计AX中“l”的个数,统计结果送CX中。 解答: START :MOV CX ,0 LOOP: SUB AX,0 JZ STP SAL AX,1 JNC NOD INC CX
NOD:JMP LOOP STP:HLT
25.编一子程序利用XLAT指令把十六进制数转换成ASCII码。假设ASCII码
存放在以 DAT1为首地址的数据区中,对应的16进制数放在以DAT2为首地址的数据区中,转换结果送以DAT3为首地址的数据区中。
解答:MAIN :PUSH BX PUSH SI PUSH DI PUSH CX PUSH AL PUSH DS
START:MOV BX,DATA1 MOV SI ,DATA2 MOV DI DATA3 MOV CX ,16 NEST:LODSB XLAT DATA1 STOSB
LOOP NEST POP DS POP AL POP CX POP DI POP SI POP BX
RET
13
1. 设AX=0FFH,执行AND AX,86H 后,AX=? AX=86H
2. 设AX=1000H,DX=2000H,CX=3000H,SP=1234H 执行 PUSH CX PUSH DX PUSH AX 后,SP=? 再执行
POP CX POP DX POP AX
后,AX=?,DX=?,SP=?
答: SP=122EH
AX=3000H,DX=2000H,SP=1234H(错一题扣2分,错2题扣3.5分)
7.请完成如下程序段,使它完成求|AX-BX|,结果放在AX的功能。 AX,BX JC SUB AX,BX AA1
AA:SUB ,
MOV AX,BX AA1:HLT
CMP AX,BX(1分) JC AA (1分) SUB AX,BX
JMP AA1(2分)
AA:SUB BX(1分) , AX(1分)
MOV AX,BX AA1:HLT
下面是多字节加法程序,第一个数是8A0BH,第二个数是D705H。请填写出正确结果。(DATA SEGMENT
FIRST DB , ,0H SECOND DB , DATA ENDS
7分)
14
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX MOV CX, MOV SI,0
NEXT: MOV AL,SECOND[SI]
ADC FIRST[SI],AL INC SI LOOP NEXT MOV AL,0
ADC AL, MOV FIRST[SI],AL MOV AH,4CH INT 21H
CODE ENDS
END START
四、判断题(在对的后面画√,错的后面画×):
1、段内转移指令执行结果要改变IP、CS的值。 (× ) 2、PUSH CS。 (√ ) 3、OUT 2000H,AL (×)
4、 MOV AH,BX ( 错 )
5、8088 中,取指令和执行指令可以重叠操作。( √ ) 6、MOV [BX], [SI] ( × ) 7、8088CPU用逻辑地址1234H:5678H访问时,可交换一个字。(√) 8、 MOV BYTE PTR[BX],1000 (× ) 9、MOV 5, AL (× ) 10、 MOV AX,[SI+DI] (× )
2、8088 的数据可以存放在几个不连续的段中。(√ ) 4. ADD 15H,BX ( 错 )
5、REP是指令前缀,重复操作的条件是CX≠0。 ( 对6、POP CS (错)
7、 MOV CS,AX ( 错 ) 8、MOV [BX],[SI] (错) 9、IN AL,2000H (错)
10、8086 中,取指令和执行指令可以重叠操作。( 对 )
11.当8086CPU内标志寄存器中的IF=0时,意味着禁止CPU响应所有类型的中断。
15
)