(完整版)微机原理课后习题参考答案 下载本文

03H 00H 05H 03H 00H 05H 03H 00H 05H

12、定义数据段如下,画出数据存储示意图,并说明变量X1和X2所对应的逻辑地址各是多少?

DATA SEGMENT AT 10A0H ORG 0010H X1 DB 22,33, ORG $ + 0020H

X2 DB ‘AB12CD’ DATA ENDS

10A00H

. . . 10A10H 16H

21H

10A32H 41H 42H

31H

32H

43H

44H

X1逻辑地址:10A0H:0010H X2的逻辑地址:10A0H:0032H 13、定义数据段如下,写出执行以下指令后的结果。 DATA SEGMENT

DA1 DW 2437H ,14A2H DA2 DB ‘ABCD’

DA3 DD 10 DUP (?) DATA ENDS

(1)MOV BX,DA1 ;(BX)=2437H (2)MOV SI,OFFSET DA1 ;(SI)=0000H (3)MOV AL, TYPE DA1 ;(AL)=2 (4)MOV AL,[DA2+02H] ;(AL)=‘C’=43H (5)MOV AL,LENGTH DA3;(AL)=10 (6)MOV AL,SIZE DA3;(AL)=10 14、程序中数据段定义的数据如下: DATA SEGMENT

NAMES DB‘GOOD MORNING!’ DW 2050H,78H,3080H DATA ENDS

请指出下列指令序列执行后累加器中的结果是多少? (1) MOV BX,OFFSET NAMES

MOV AL,[BX+03H]

(2) MOV BX,12

MOV SI,3

MOV AX,NAMES[BX+SI]

(3) MOV BX,12

MOV SI,3

LEA AX,NAMES[BX+SI]

答:(1)[BX+03H]对应的是 “D” 因此结果是 44H (2)78H

(3)LEA 将源操作数的逻辑地址送到目标操作数,因此 0FH

18、编写程序,将MBUF为起始单元的5个数按相反次序传送到NBUF开始的存储单元中。 答:DATA SEGMENT

MBUF DB 1,2,3,4,5 COUNT EQU $-MBUF NBUF DB 5 DUP(?) DATA ENDS

STACK SEGMENT PARA STACK DB 20H DUP(?) STACK ENDS

CODE SEGMENT

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

MOV BX,OFFSET MBUF MOV CX,5 LOP1: PUSH [BX] INC BX

DEC CX JNZ LOP1

MOV BX,OFFSET NBUF MOV CX,5 LOP2:POP [BX] INC BX DEC CX JNZ LOP2 MOV AX,4CH INT 21H CODE ENDS END START

20、编写程序,将内存中某数据块中的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数(数据自定)。 答:DATA SEGMENT SHU DB 2,4,-9,-10,5,-2,-2,4,5,7;源数据块,共有十个数,六个正数,四个负数 COUNT EQU $-SHU ZS DB 10 DUP(?);给正数预留10个字节的空间 ORG 0020H ;调整数据位置 FS DB 10 DUP(?) XZ DB 'NUMBER OF XZ:','$' ;显示在屏幕上的字符串 XF DB 'NUMBER OF XF:','$' DATA ENDS STACK SEGMENT STACK DW 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA

MOV DS,AX ;数据段装入 MOV BX,OFFSET SHU MOV DI,OFFSET ZS MOV SI,OFFSET FS MOV CX,COUNT LOP1: MOV AL,[BX] CMP AL,0 JG SZ ;大于0跳转到SZ中 MOV [SI],AL INC SI ;负数送到缓冲区FS中 JMP C1 SZ: MOV [DI],AL ;正数送到缓冲区ZS中 INC DI C1: INC BX

DEC CX

JZ SHUCHU ;ZF标志位为1,cx为0 ,跳到SHUCHU执行 JMP LOP1 ;cx不为0,循环 SHUCHU: MOV DX,OFFSET XZ MOV AH,09H INT 21H ;输出字符串 SUB DI,OFFSET ZS ;正数的个数 ADD DI,30H MOV DX,DI MOV AH,02H INT 21H ;转为ASCII码输出 MOV DX,OFFSET XF MOV AH,09H INT 21H

SUB SI,OFFSET FS ;负数的个数 ADD SI,30H MOV DX,SI MOV AH,02H INT 21H ;转为ASCII码输出 MOV AH,4CH

INT 21H ;返回DOS

CODE ENDS END START

21、编写程序,从内存BLOCK开始,存放着10个字节的有符号数,从这些数种找出绝对值最大的数,存在MAX中。 答: DATA SEGMENT

BLOCK DB 2,8,9,18,-14,-12,5,12;源数据 共有8个数,绝对值最大数为18

COUNT EQU $-BLOCK ;数据长度 ORG 0020H

MAX DB ? ;最大数据 DATA ENDS

STACK SEGMENT STACK DB 100 DUP (?)

STACK ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA,SS:STACK START: MOV AX, DATA

MOV DS, AX ;装入数据段基址 MOV AL, 0H ;初始AX