内容发布更新时间 : 2024/12/26 4:16:14星期一 下面是文章的全部内容请认真阅读。
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