正如我在书中读到的,通过地址 [2],我们可以找到不可用内存的第一个字节的地址。我试着写一些东西然后读它。如果我没有犯错,我做了这个操作。那么汇编程序中什么是不可用内存?
CODE SEGMENT
ASSUME CS:CODE, DS:CODE, ES:NOTHING
org 256
;------start-------
STARTPROC PROC
mov di, 2
;in ax is adress of unavailible byte
mov ax, [di]
;now es point on unavailable memory
mov es, ax
mov bx, 0FFFFh
;write with offset=2
mov es:[di], bx
;read es:[di]
mov ax, es:[di]
mov di, offset temp
add di, 3
call WRD_TO_HEX
mov dx, offset temp
mov ah, 09h
int 21h
ret
STARTPROC ENDP
temp db 4 DUP ('0'), '$'
TETR_TO_HEX PROC near
and AL, 0Fh
cmp AL, 09
jbe NEXT
add AL, 07
NEXT:add AL, 30h
ret
TETR_TO_HEX ENDP
BYTE_TO_HEX PROC near
push CX
mov AH, AL
call TETR_TO_HEX
xchg AL,AH
mov CL, 4
shr AL, CL
call TETR_TO_HEX
pop CX
ret
BYTE_TO_HEX ENDP
WRD_TO_HEX PROC near
push BX
mov BH, AH
call BYTE_TO_HEX
mov [DI], AH
dec DI
mov [DI], AL
dec DI
mov AL, BH
call BYTE_TO_HEX
mov [DI], AH
dec DI
mov [DI], AL
pop BX
ret
WRD_TO_HEX ENDP
CODE ENDS
end STARTPROC
解析信息需要 Proc TETR_TO_HEX、BYTE_TO_HEX、WRD_TO_HEX。
我将 FFFF 写入偏移量 = 2 的不可用内存,然后正确读取。怎么了?