0

私は 8086 TASM を使用して組み立ての練習を少ししていますが、解決しようとしている問題に遭遇しました。主なプログラムは、大きな数の足し算と引き算を行う基本的な電卓です。ユーザー入力を保存するポイントに到達し、そこから 48 を減算して、実際の 10 進数にしようとしました。問題は、実際の数字ではなく、スマイリーとポーカー シンボルを書き出すことです。読み取りと印刷のコードは次のとおりです。

READNUM PROC
PUSH SI
MOV CX, 0
READ:
MOV AH, 1h 
INT 21h
CMP CX, 9
JE ENDREAD
CMP AL, 0dh
JE ENDREAD
SUB AL, 48d
MOV [SI], AL
INC CX
INC SI
JMP READ
ENDREAD:
MOV byte ptr [SI], 0
MOV AX, 0e0ah 
INT 10h
POP SI
CALL PRINTER
RET
READNUM ENDP


PRINTER PROC              
CYCLE:
LODSB               
CMP     AL, 0       
JE      OVER         
MOV     AH, 14     
INT     10H          
JMP     CYCLE         
VER:
RET                 
PRINTER ENDP  
4

2 に答える 2

2

48 を引くと、数字が文字から値に変換されます (例: '0'-> 0)。数字を画面に出力したい場合は、再び 48 を追加して文字に変換する必要があります。

于 2013-04-30T14:45:28.253 に答える
0

そうこうしているうちに、足りないものが見つかりました。al に 30h を追加するのを忘れていました。サブの前にこのように:

...
ADD AL, 30h
SUB AL, 48d
...
于 2013-04-30T14:44:44.767 に答える