[英]8086 assembly code bug
您好,我嘗試運行該例程,但是它停止了。 當啟動AX = 4B5B時,此代碼應該將AL內容轉換為ASCII對應內容並將其存儲在RESULT變量中。 我剛剛開始組裝,請親愛的蜜蜂,如果有人可以提前幫助我。
ASSUME CS:Code, DS:Data
Data SEGMENT
RESULT DB 3 DUP(?)
Data ENDS
Code SEGMENT
Debut: MOV BX, offset RESULT
MOV AH, AL
QuartH: MOV CL, 4
SHR AH, CL
AND AH, 0FH
CMP AH, 0AH
JAE AlphaH
ADD AH, '0'
JMP FinH
AlphaH: ADD AH, 'A'
SUB AH, 0AH
FinH: MOV [BX], AH
QuartL: AND AL, 0FH
CMP AL, 0AH
JAE AlphaL
ADD AL, '0'
JMP FinL
AlphaL: ADD AL, 'A'
SUB AL, 0AH
FinL: MOV Byte ptr[BX+1], AL
FinCH: MOV Byte ptr[BX+2], '$'
Code ENDS
END Debut
首先:確保DS指向您的數據段。 在DOS EXE程序中,默認情況下不是這樣,除非您使用的是微型模型。 因此,在代碼的開頭,添加以下內容:
MOV AX,data
MOV DS,AX
第二:如果要從程序的另一部分調用此例程,則最后需要RET
。 我想這不是您在做什么,並且我們正在查看您的整個程序。 如果是這樣,那么您必須以
MOV AX,4C00h
INT 21h
返回DOS。
而且...好吧,您構建了一個$終止的字符串,以便打印它,不是嗎? 為此,請使用DOS函數09h
:
MOV DX,offset RESULT
MOV AH,9
INT 21h
如果將$
直接放在RESULT
變量中,甚至可以跳過代碼中添加$
的部分。 像這樣:
RESULT db 32,32,13,10,'$'
這為您提供了兩個十六進制數字(初始化為空格字符)的空間,如果您要打印此字符串,還可以使用回車符和換行符,以及結尾的$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.