利用十六进制字节显示子程序DISPHB设计一个从低地址到高地址逐个字节显示某个主存区域内容的子程序DISPMEM。其入口参数:EAX=主存偏移地址,ECX=字节个数(主存区域的长度)。同时编写一个主程序进行验证。
时间: 2024-03-10 08:48:01 浏览: 198
下面是利用十六进制字节显示子程序DISPHB设计一个从低地址到高地址逐个字节显示某个主存区域内容的子程序DISPMEM的代码:
```assembly
DISPHB PROC NEAR
PUSH AX
PUSH BX
MOV BX, AX
MOV AH, 02H
MOV DL, 20H
INT 21H
MOV AH, 02H
MOV DL, 20H
INT 21H
MOV DL, BL
AND DL, 0FH
CMP DL, 0AH
JAE HEXIT1
ADD DL, 30H
JMP HEXIT2
HEXIT1:
ADD DL, 37H
HEXIT2:
MOV AH, 02H
INT 21H
MOV DL, BH
SHR DL, 4
AND DL, 0FH
CMP DL, 0AH
JAE HEXIT3
ADD DL, 30H
JMP HEXIT4
HEXIT3:
ADD DL, 37H
HEXIT4:
MOV AH, 02H
INT 21H
MOV DL, BH
AND DL, 0FH
CMP DL, 0AH
JAE HEXIT5
ADD DL, 30H
JMP HEXIT6
HEXIT5:
ADD DL, 37H
HEXIT6:
MOV AH, 02H
INT 21H
MOV DL, 20H
INT 21H
POP BX
POP AX
RET
DISPHB ENDP
DISPMEM PROC NEAR
PUSH AX
PUSH BX
PUSH CX
MOV BX, 10H
XOR AX, AX
MOV CX, 0FFFFH
CMP CX, CX
JZ DISPMEX
DISPMLP:
MOV AX, DS:[EAX]
CALL DISPHB
ADD EAX, 1
DEC CX
JNZ DISPMLP
DISPMEX:
POP CX
POP BX
POP AX
RET
DISPMEM ENDP
```
其中,DISPHB子程序是用来将一个字节转换成两位十六进制数并显示出来的。而DISPMEM子程序则是从低地址到高地址逐个字节地显示主存区域内容的。
下面是主程序的代码:
```assembly
.MODEL SMALL
.STACK 100H
.DATA
.CODE
START:
MOV AX, @DATA
MOV DS, AX
; 设置测试数据
MOV EAX, 1000H
MOV ECX, 10H
MOV CX, 10H
MOV BX, 0
; 调用DISPMEM子程序显示主存区域内容
CALL DISPMEM
; 退出程序
MOV AH, 4CH
INT 21H
END START
```
这个主程序会将主存区域从地址1000H开始的10个字节的内容逐个字节地显示出来,然后退出程序。
阅读全文