0

符号付きと符号なしの両方の規則で次の操作を実行する必要があります: x*x-y+2、x はバイト、ya はダブル ワードです。これは、署名なしの規則を使用してこれまでに試したことですが、エラーがスローされるため、何か間違ったことを書いたようです。間違いは何ですか?
mov al, x
mov ah, 0
mul x
mov dx, 0
sub dword ptr ax, y
add ax, 2

4

1 に答える 1

1

1) unsigned オプションの場合:

まず、x をレジスタにロードして二乗する必要があります。

 mov eax,0
 mov al, x
 mul al

これは本質的にこれを行いました: AX = x*x、および AX はワード サイズです。EAX の上部はすべてゼロであるため、本質的に EAX = x*x であり、EAX はすでにダブル ワード サイズです。ここで、y を引いて 2 を足す必要があります。

 mov ebx, y
 sub eax, ebx
 add eax, 2

そして、あなたはそれを持っています!答えはEAXの中にあります。

2) 署名付きオプションの場合:

基本的には同じことを行いますが、今回は CWDE 命令を使用して AX 内の値を EAX に拡張し、符号情報を正しく保ちます。

 mov al, x
 imul ax
 cwde 

 mov ebx, y
 sub eax, ebx
 add eax, 2
于 2013-11-05T17:18:36.527 に答える