1

2つの数値を加算し、結果を10進数で表示するプログラムを作成したかったのですが、最初はケーキのように見えましたが、実際にはそうではありませんでした。10進数は0〜9文字であり、数学を実行するために必要な数値よりも大きい数値を追加する場合は、

これが私がやったことです、私は2つの数字35と39を追加したかったです、

35 + 39 = 74

MOV BL,35H
MOV AL,39H
ADD AL,BL

DAA ;Decimal after Addition => the result of it would be 0074H


PUSH AX     ;PRESERVE 0074H

; Separating the two numbers

AND AL,00001111B ; AL => 0000 0100 
ADD AL,30H       ; ; AL => 0004H + 30H = 4 of Decimal

POP AX ;AX = 74H => 01110100

ROR AL,1
ROR AL,1
ROR AL,1
ROR AL,1

AND AL,00001111B ;AL => 0000 0111
ADD Al,30H       ;A: => 0007H + 30H = 7 of Decimal
MOV DL,AL 



MOV AH,4CH ;Return Control to the DOS
INT 21H

両方の数値を復元しましたが、結果を「74」として表示する方法を教えてください。

また、この方法は非常に時間がかかりますが、これを行うためのより良い、より効率的な方法はありますか?

4

2 に答える 2

2

結果を個々の文字(7の場合は「7」、4の場合は「4」)として印刷するか、それらの文字を組み合わせて文字列にし、それに「$」文字を追加してその文字列を印刷することができます(端末「$」は勝ちます」印刷されません)。

ahDOSには、個々の文字( = 2、dl= ASCII文字コード)および$で終了する文字列(ah= 9、dsdx= $で終了する文字列のアドレス)を印刷するための関数があります。

于 2012-09-20T23:53:59.240 に答える
2
MOV BL,35H
MOV AL,39H
ADD AL,BL

DAA          # al = 74h = 0111.0100

XOR AH,AH    # ah = 0 (just in case it wasn't)
             # ax = 0000.0000.0111.0100

ROR AX,4     # ax = 0100.0000.0000.0111 = 4007h
SHR AH,4     # ax = 0000.0100.0000.0111 = 0407h
ADD AX,3030h # ax = 0011.0100.0011.0111 = 3437h = ASCII "74" (reversed due to little endian)

これで、AXをバッファにコピーして印刷するだけです。

于 2012-09-21T11:51:08.180 に答える