簡體   English   中英

8086匯編代碼錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM