私が本を読んでいると、アドレス[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をoffset=2の使用できないメモリに書き込んでから、正しく読み取ります。なにが問題ですか?