任何人都可以幫助我理解這些方向嗎?我目前正在學習 x86 匯編,但似乎無法顯示我正在尋找的輸出。我知道 AL 包含我需要顯示的位元組……但是考慮到這些要求,我如何才能顯示正確的輸出:
我在 DH 和 DL 的 WriteChar 上陷入困境,因為我用我的解決方案尋找的輸出似乎不正確......我不知道我錯過了什么。我可以正確初始化 AL 和 DL/DH,但是當我使用 WriteChar 時,它會列印出完全不同的字符。
- 將最高有效半位元組的 ASCII 碼存盤在暫存器 DH 中。
- 將最低有效半位元組的 ASCII 碼存盤在暫存器 DL 中。
- 在控制臺上顯示(使用 WriteChar)DH 中存盤的字符(回想一下 WriteChar 使用 AL 來顯示字符)。
- 在控制臺上顯示(使用 WriteChar)存盤在 DL 中的字符。
- 顯示 'h' 表示該數字是十六進制數。
- '顯示''換行'字符(ASCII 碼為 0Ah)以轉到下一行。
- 'Display' 'carriage' 字符(ASCII 碼為 0Dh)轉到下一行。
這是一個例子,下面是我到目前為止所擁有的......
示例:如果 AL 包含數字 94h,則您的程式 1) 必須在 DH 中存盤 39h(字符 '9' 的 ASCII 碼),2)必須在 DL 中存盤 34h(字符 '4' 的 ASCII 碼),3) 必須顯示字符“9”、“4”、“h”、“換行”和“回車”。
代碼嘗試:
INCLUDE Irvine32.inc
.data
myHex BYTE "h", 0
.code
ExerciseTwo proc
MOV EAX, 0
MOV AL, 94h
CALL WriteChar
MOV DH, AL
SHR DX, 4
SHR DL, 4
MOV EDX, OFFSET myHex
CALL WriteString
invoke ExitProcess, 0
ExerciseTwo endp
end ExerciseTwo
uj5u.com熱心網友回復:
從數字 0 到 9 的十六進制轉換涉及添加 48 以得到“0”到“9”
從數字 10 到 15 的十六進制轉換涉及添加 55 (48 7) 以得到“A”到“F”
INCLUDE Irvine32.inc
.data
myHex BYTE "h", 10, 13, 0 ; include 10 and 13 here
.code
ExerciseTwo proc
mov eax, 94h ; in 1 instruction
MOV DH, AL
SHR DX, 4
SHR DL, 4
mov al, dh
call WriteHexDigit ; use subroutines to not repeat yourself
mov al, dl
call WriteHexDigit
MOV EDX, OFFSET myHex
CALL WriteString
invoke ExitProcess, 0
WriteHexDigit:
add al, '0' ; operations on AL use shorter encodings
cmp al, '9'
jbe ok1
add al, 7
ok1:
jmp WriteChar ; tail-call replaced by jump
ExerciseTwo endp ```
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/352227.html
