汇编语言习题答案 下载本文

内容发布更新时间 : 2024/5/3 18:26:17星期一 下面是文章的全部内容请认真阅读。

第3章 8086/8088指令系统与寻址方式习题

3. 3 8086系统中,设DS=1000H,ES=2000H,SS=1200H,BX=0300H,SI=0200H,

BP=0100H,VAR的偏移量为0600H,请指出下列指令的目标操作数的寻址方式,若目标操作数为存储器操作数,计算它们的物理地址。

(1)MOV BX,12 ;目标操作数为寄存器寻址

(2)MOV [BX],12 ;目标操作数为寄存器间址 PA=10300H (3)MOV ES:[SI],AX ;目标操作数为寄存器间址 PA=20200H (4)MOV VAR,8 ;目标操作数为存储器直接寻址 PA=10600H (5)MOV [BX][SI],AX ;目标操作数为基址加变址寻址 PA=10500H

(6)MOV 6[BP][SI],AL ;目标操作数为相对的基址加变址寻址 PA=12306H (7)MOV [1000H],DX ;目标操作数为存储器直接寻址 PA=11000H (8)MOV 6[BX],CX ;目标操作数为寄存器相对寻址 PA=10306H (9)MOV VAR+5,AX ;目标操作数为存储器直接寻址 PA=10605H

3.4 下面这些指令中哪些是正确的?那些是错误的?如果是错误的,请说明原因。 (1)XCHG CS,AX ;错,CS不能参与交换 (2)MOV [BX],[1000] ;错,存储器之不能交换 (3)XCHG BX,IP ;错,IP不能参与交换 (4)PUSH CS

(5)POP CS ;错,不能将数据弹到CS中 (6)IN BX,DX ;输入/输出只能通过AL/AX

(7)MOV BYTE[BX],1000 ;1000大于255,不能装入字节单元 (8)MOV CS,[1000] ;CS不能作为目标寄存器

(9)MOV BX,OFFSET VAR[SI] ;OFFSET只能取变量的偏移地址 (10)MOV AX,[SI][DI] ;SI、DI不能成为基址加变址 (11)MOV COUNT[BX][SI],ES:AX ;AX是寄存器,不能加段前缀

3.7 设当前 SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?当执行 PUSH BX 指令后,栈顶地址和栈顶2个字节的内容分别是什么?

当前栈顶的地址=2FF00H

当执行PUSH BX 指令后,栈顶地址=2FEFEH (2FEFEH)=57H (2FEFFH)=34H

3.8 设DX=78C5H,CL=5,CF=1,确定下列各条指令执行后,DX和CF中的值。 (1) SHR DX,1 ;DX=3C62H CF=1 (2) SAR DX,CL ;DX=03C6H CF=0 (3) SHL DX,CL ;DX=18A0H CF=1 (4) ROR DX,CL ;DX=2BC6H CF=0 (5) RCL DX,CL ;DX=18B7H CF=1 (6) RCR DH,1 ;DX=BCC5H CF=0;

3.9 设AX=0A69H,VALUE字变量中存放的内容为1927H,写出下列各条指令执行后寄存器和CF、ZF、OF、SF、PF的值。

AX CF ZF OF SF PF (1)XOR AX,VALUE ; 134EH 0 0 0 0 1 (2)AND AX,VALUE ; 0821H 0 0 0 0 1 (3)SUB AX,VALUE ; F142H 1 0 0 1 1 (4)CMP AX,VALUE ; 0A69H 1 0 0 1 1

(5)NOT AX ; F596H X X X X X (6)TEST AX,VALUE ; 0A69H 0 0 0 0 1

3.10 设AX和BX中是符号数,CX和DX是无符号数,请分别为下列各项确定CMP和条件转移指令。 (1) CX值超过DX转移。 (2) AX未超过BX转移。 (3) DX为0转移。

(4) CX值等于小于DX转移。 (1) CMP CX,DX

JA NEXT

(2) CMP AX,BX JLE NEXT (3) CMP DX,0

JZ NEXT (4) CMP CX,DX JBE NEXT

3.11 阅11 阅读分析下列指令序列:

ADD AX,BX JNO L1 JNC L2 SUB AX,BX JNC L3 JNO L4 JMP L5

若AX和BX的初值分别为以下5种情况,则执行该指令序列后,程序将分别转向何处(L1~L5中的一个)。

(1) AX=13C6H, BX=80DCH (2) AX=0B568H,BX=54B7H (3) AX=42C8H, BX=608DH (4) AX=0D023H,BX=9FD0H (5) AX=9FD0H, BX=0D023H (1) 转L1 (2) 转L1 (3) 转L2 (4) 转L5 (5) 转L5

第四章 汇编语言程序设计习题

4.5 画出下列语句中的数据在存储器中的存储情况。

VARB DB 34,34H,‘GOOD’,2 DUP(1,2 DUP(0)) VARW DW 5678H,‘CD’,$+2,2 DUP(100) VARC EQU 12

VARB VARW 22H 4.6 按下列要求,写出各数据定义语句。 34H (1) DB1为10H个重复的字节数据序列:1,2,5个3,4。

‘G’ (2) DB2为字符串‘STUDENTS’

‘O’ (3) DB3为十六进制数序列:12H,ABCDH ‘O’ (4) 用等值语句给符号COUNT赋以DB1数据区所占字节数,该语句写在最后。 ‘D’

DB1 DB 16 DUP(1,2,5 DUP(3,4)) 1 DB2 DB ‘STUDENTS’ 0 DB3 DW 12H,0ABCDH 0 COUNT EQU DB2-DB1

1

0 4.8 对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?

0 PREP DB ? 78H TABA DW 5 DUP(?)

TABB DB ‘NEXT’ 56H TABC DD 12345678H ‘D’ (1)MOV AX, TYPE PREP ;AX=1 ‘C’ (2)MOV AX, TYPE TABA ;AX=2

12H (3)MOV AX, LENGTH TABA ;AX=5

00H (4)MOV AX, SIZE TABA ;AX=10

64H (5)MOV AX, LENGTH TABB ;AX=1 00 (6)MOV DX, SIZE TABC ;AX=4 64H 4.10 若自STRING单元开始存放有一个字符串(以字符‘$’结束);

(1) 编程统计该字符串长度(不包含 $ 字符,并假设长度为两字节)。

(2) 把字符串长度放在STRING 单元,把整个字符串往下移两个单元。

程序段为:

(1) MOV SI,OFFSET STRING

XOR BX,BX CONT:MOV AL,[SI] CMP AL,‘$’ JZ NEXT INC BX INC SI JMP CONT NEXT: MOV AH,4CH INT 21H

(2) STRING DB ‘????. $’

COUNT EQU $-STRING :

MOV SI,OFFSET STRING MOV CX,COUNT ADD SI,CX CONT: DEC SI

MOV AL,[SI] MOV [SI+2],AL] LOOP CONT

MOV CX,COUNT MOV STRING,CX

MOV AH,4CH INT 21H

4.11 将字符串STRING中的‘&’ 字符用空格代替,字符串STRING“The data is FEB&03”。 程序为: DATA SEGMENT

STRING DB ‘The data is FEB&03’ COUNT EQU $-STRING DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

MOV SI,OFFSET STRING MOV CX,COUNT MOV AL,‘$’ CONT: CMP AL,[SI] JNZ NEXT

MOV BYTE PTR[SI],‘ ’ NEXT: INC SI LOOP CONT MOV AH,4CH INT 21H CODE ENDS

END START

4.16 键盘输入十个学生的成绩,试编制一个程序统计69~69分,70~79分,80~89分,90~99分及100分的人数,分别存放到S6,S7,S8,S9及S10单元中。

程序为: DATA SEGMENT

BUF DB 10 DUP(?) S6 DB ? S7 DB ? S8 DB ? S9 DB ? S10 DB ? DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX

MOV SI,OFFSET S6 XOR AL,AL MOV CX,0504H CONT: MOV [SI],AL INC SI LOOP CONT MOV CX,10

MOV SI,OFFSET BUF CONT1: MOV AH,1 INT 21H SHL AL,CL MOV BL,AL MOV AH,1 INT 21H SUB AL,30H OR AL,BL MOV [SI],AL CMP AL,70H JAE NEXT1

INC BYTE PTR S6 NEXT1: CMP AL,80H JAE NEXT2

INC BYTE PTR S7 NEXT2: CMP AL,90H JAE NEXT3

INC BYTE PTR S8 NEXT3: CMP AL,99H JA NEXT4

INC BYTE PTR S9 JMP NEXT5

NEXT4; INC BYTE PTR S10 NEXT5: INC SI LOOP CONT1 MOV AH,4CH INT 21H CODE ENDS

END START 第7章 基本输入/输出接口习题

7.4 现有一输入设备,其数据端口地址为FFE0H,状态端口地址为FFE2H,当其D0为1时表明输入数据准备好。试采用查询方式,编程实现从该设备读取100个字节数据并保存到2000H:2000H开始的内存中。

程序段为:

MOV AX,2000H MOV DS,AX MOV SI,2000H MOV CX,100

CONT: MOV DX,0FFE2H CONT1: IN AL,DX TEST AL,01 JZ CONT1 MOV DX,0FFE0H IN AL,DX MOV [SI],AL INC SI LOOP CONT

MOV AH,4CH INT 21H

7.5 硬件如图7.5所示,试编程实现:S0控制8个发光二极管1亮7暗,S1控制8个 8个发光二极管7亮1暗,S2控制某一亮点(或暗点)以一定时间间隔循环向左移动,S3控制某一亮点(或暗点)以一定时间间隔循环向右移动,两个或两个以上开关闭合,则结束程序。

程序段为:(省略伪指令) BUF1 DB 01H BUF2 DB 80H

?

MOV DX,200H AGAIN: IN AL,DX

XOR BL,BL MOV CX,8 CONT: ROR AL,1

JNC NEXT INC BL NEXT: LOOP CONT CMP BL,2 JAE EXIT

CMP AL,0FEH JZ 1L7A CMP AL,0FD JZ 1A7L CMP AL,0FBH JZ ZSHL CMP AL,0F7H JZ YSHR 1L7A: MOV AL,80H OUT DX,AL JMP AGAIN 7A7L:MOV AL,7F OUT DX,AL JMP AGAIN ZSHL:MOV AL,BUF1 ROL AL,1 MOV BUF1,AL OUT DX,AL CALL D500MS JMP AGAIN YSHR:MOV AL,BUF2 ROR AL,1 MOV BUF1,AL OUT DX,AL CALL D500MS JMP AGAIN EXIT:MOV AH,4CH INT 21H 第8章 中断习题

8.2 已知中断向量表表中地址0020H ~ 0023H的单元中依次是40H,00H,00H,01H,

并知INT 08H指令本身所在的地址为9000H:00A0H。若SP=0100H,SS=0300H,标志寄存器内容为0240H,试指出在执行INT 08H指令,刚进入它的中断服务程序时,SP,SS,IP,CS和堆栈顶上三个字的内容(用图表示)。 执行后 SS=0300H SP=00FAH

CS=0100H IP=0040H ,堆栈顶上三个字的内容如下所示: 栈区