学习-----好资料
(3)SUB 33H, AL ;立即数不能作为目的操作数 (4)PUSH AL ;压栈指令的操作数必须是字类型 (5)MUL 45H ;乘法指令中的操作数不能是立即数 (6)MOV [BX], [SI] ;源和目的操作数不能同时为内存操作数 (7)MOVS BYTE PTR DS:[DI], BYTE PTR DS:[SI] ; 目的操作数应该在ES段。 (8)ADD DATA[DI+BP], ES:[CX] ;CX不能做间址寄存器使用 (9)JMP BYTE PTR[SI] ;操作数必须是字类型 (10)OUT 3F8H, AL ;16位的端口地址不能直接在输入输出指令中使用。
4. 根据要求写出一条(或几条)汇编语言指令。
(1)将立即数4000H送入寄存器BX。 (2)将立即数4000H送入段寄存器DS。
(3)将变址寄存器DI的内容送入数据段中2000H的存储单元。 (4)把数据段中2000H存储单元的内容送段寄存器ES。 (5)将立即数3DH与AL相加,结果送回AL。 (6)把BX与CX寄存器内容相加,结果送入BX。
(7)寄存器BX中的低4位内容保持不变,其他位按位取反,结果仍在BX中。 (8)实现AX与-128的乘积运算。
(9)实现CX中高、低8位内容的交换。
(10)将DX中D0、D4、D8位置1,其余位保持不变。 解:
(1)将立即数4000H送入寄存器BX。
MOV BX,4000H
(2)将立即数4000H送入段寄存器DS。
MOV AX, 4000H MOV DS, AX
(3)将变址寄存器DI的内容送入数据段中2000H的存储单元。
MOV [2000H],DI
(4)把数据段中2000H存储单元的内容送段寄存器ES。
MOV AX,[2000H] MOV ES,AX
(5)将立即数3DH与AL相加,结果送回AL。
ADD AL,3DH
(6)把BX与CX寄存器内容相加,结果送入BX。
ADD BX,CX
(7)寄存器BX中的低4位内容保持不变,其他位按位取反,结果仍在BX中。
MOV AX, BX, NOT AX
AND AX,0FFF0H AND BX,000FH OR BX,AX
(8)实现AX与-128的乘积运算。
MOV BX,-128 IMUL BX
(9)实现CX中高、低8位内容的交换。
MOV AL,8
更多精品文档
学习-----好资料
ROL CX AL
(10)将DX中D0、D4、D8位置1,其余位保持不变。
0R DX,0111H
5. 设SS=2000H,SP=1000H,SI=2300,DI=7800,BX=9A00H。说明执行下面每条指令时,堆栈内容的变化和堆栈指针的值。
PUSH SI PUSH DI POP BX
解:PUSH SI
(0FFFH)=23H (0FFEH)=00H SP=0FFEH PUSH DI
(0FFDH)=78H (0FFCH)=00H SP=0FFCH POP BX BX=7800H SP=0FFEH
6. 内存中18FC0H、18FC1H、18FC2H单元的内容分别为23H、55、5AH,DS=1000H,BX=8FC0H,SI=1,执行下面两条指令后AX=?DX=?
MOV AX, [BX+SI] LEA DX, [BX+SI] 解:AX=5A55H
DX=8FC1H
7. 回答下列问题:
(1)设AL=7FH,执行CBW指令后,AX=?
(2)设AX=8A9CH,执行CWD指令后,AX=?DX=? 解:(1)设AL=7FH,执行CBW指令后,AX=007FH
(2)设AX=8A9CH,执行CWD指令后,AX=8A9CH DX=FFFFH
8. 执行以下两条指令后,FLAGS的6个状态标志位的值是什么?
MOV AX, 847BH ADD AX, 9438H 结果为118B3H
解:CF=1 PF=0(为运算结果的低8位奇偶) AF=1 ZF=0 SF=0 OF=1
9. 下面程序段将03E8H转换成十进制数并显示,填写指令后的空格。
MOV AX, 03E8H ;AH= 03H , AL= E8H MOV CX, 4
MOV DI, 2000H ;DI= 2000H
MOV BX, 10 ;BH= 00 , BL= 0AH GO0: SUB DX, DX ;CF= 0 , ZF= 1 更多精品文档
学习-----好资料
DIV BX ;AX= 64H , DX= 0 MOV [DI], DL ;[DI]= 0 INC DI
LOOP GO0 ;CX= 3 MOV CX, 4 GO1: DEC DI ;DI= 2003H
MOV DL, [DI] ;DL=01 OR DL, 30H ;DL= 31H
MOV AH, 02 ;显示1位十进制数1 INT 21H LOOP GO1
10. 用串操作指令替换以下程序段:
ABC:MOV AL, [SI] MOV ES:[DI], AL INC SI INC DI LOOP ABC 解:REP MOVSB
11. 设AX=AAH,顺序执行下列各条指令,填写空格。
(1)XOR AX, 0FFFFH ;AX= (2)AND AX, 13A0H ;AX= (3)OR AX, 25C9H ;AX= (4)TEST AX, 0004H ;AX= 解: (1)XOR AX, 0FFFFH ;AX= FF55H
(2)AND AX, 13A0H ;AX= 00A0H (3)OR AX, 25C9H ;AX= 25EBH (4)TEST AX, 0004H ;AX= 00AAH
12. 试写出执行下列3条指令后BX寄存器的内容。
MOV CL,2H MOV BX,CO2DH SHR BX,CL 解: BX=300BH
13. 执行下列程序段后,AX、BX的内容各是什么?
(1) MOV AX,0001H
MOV BX,8000H
NEG AX ;0-0001H MOV CX,4 AA:SHL AX,1 RCL BX,1 LOOP AA HLT
解:AX=FFF0H BX=000FH 更多精品文档
学习-----好资料
(2)MOV AX,0 MOV BX,1 MOV CX,100 A: ADD AX,BX INC BX LOOP A HLT
解:AX=8080H BX=0101H
14. 编写程序段,实现下述要求:
(1) 使AX寄存器的低4位清0,其余位不变。 (2) 使BX寄存器的低4位置1,其余位不变。
(3) 测试AX的第0位和第4位,两位都是1时将AL清0。
(4) 测试AX的第0位和第4位,两位中有一个为1时将AL清0。 解:
(1)使AX寄存器的低4位清0,其余位不变。 AND AX, 0FFF0H
(2) 使BX寄存器的低4位置1,其余位不变。
OR AX, 0FH
(3)测试AX的第0位和第4位,两位都是1时将AL清0。
TEST AX,01H JZ AA
TEST AX,10H JZ AA MOV AL,0 HLT AA: ......
(4)测试AX的第0位和第4位,两位中有一个为1时将AL清0。
TEST AX, 11H JZ AA MOV AL,0 AA: .......
15. 编写程序段,完成把AX中的16进制数转换为ASCII码,并将对应的ASCII码依次存入MEM开始的存储单元中。例如,当AX的内容为37B6H时,MEM开始的4 个单元的内容依次为33H,37H,42H,36H。 解:
MOV CX,4 LEA SI,MEM ADD SI,3 ;SI指向MEM+3 CC: MOV BX,AX ;保存原始数据
AND AX, 000FH ;取个位数 CMP AL, 9 JA AA ;在A~B之间就加37H
更多精品文档
学习-----好资料
ADD AL,30H ;在0~9之间就加30H JMP BB AA: ADD AL,37H BB: MOV [SI],AL ;保存ASCII值
DEC SI PUSH CX MOV AX,BX MOV CL,4 SHR AX,CL ;准备取下一个数 POP CX LOOP CC
16. 编写程序段,求从TABLE开始的10个无符号数的和,结果放在SUM单元中。 解: LEA SI,TABLE MOV CX,10 XOR AX,AX NEXT: ADD AL,[SI] ADC AH,0 INC SI LOOP NEXT MOV SUM,AX
17. 编写程序段,从键盘上输入字符串‘HELLO’,并在串尾加结束标志‘$’。 解: LEA DX,STRING ;设置字符串存放缓冲区首地址 MOV AH ,0AH ;调用10号功能,输入字符串 INT 21H
MOV CL,STRING+1 ;实际键入的字符个数送CL XOR CH,CH
ADD DX, 2 ADD DX,CX ;得到字符串尾地址 MOV BX,DX MOV BYTE PTR[BX],'$'
18. 编写程序段,在屏幕上依次显示1、2、3、A、B、C。 解: LEA BX,STR ;STR为6个字符的存放区域首地址 MOV CX,6 LPP: MOV AH,2 MOV DL,[BX] INC BX INT 21H ;利用2号功能调用依次先生6个字符 LOOP LPP
19. 编写程序段,在屏幕上显示字符串“Hello World”。 解: LEA DX,STRING ; STRING字符的存放区域首地址 MOV AH,09H INT 21H ; 利用9号功能调用显示字符串 更多精品文档