必要なもの
書いてほしいプログラムの一部を追加しました。問題は、バイトを定義し、それらを単語(符号付き拡張子)に変換し、後で追加するように要求されることです。
問題
追加しても、目的の出力が得られないことがあります。たとえば、私は次のものを使用しています。
data segment
first DB 183
second DB 94
data ends
code segment
start:
mov ax,data
mov ds,ax
mov AX, 0
mov AL, first
cbw
mov BX, AX
mov AX, 0
mov AL, second
cbw
add AX, BX
mov ax, 4c00h
int 21h
code ends
end start
94 ( 16 進数の 5E ) + 183 ( 16 進数の B7 ) = 277 ( 16 進数の 115 ) ですが、最初cbw
のAX = B7ではなくFFB7です。ただし、2 番目の数値は予想どおりAX = 5Eのままであるため、2 つの結果を加算するとAX = 15 with CF = 1になります。
CBW に関するこのページを見つけました。「AL の符号ビット (ビット 7) が設定されている場合、この命令は AH を 0FFh に設定します」と記載されています。B7 はバイナリで1011 0111であるためです。
何か不足していますか?キャリーフラグを何らかの方法で解釈する必要がありますか? 115 (hex)を取得できないのはなぜですか?
前もって感謝します。