2017-01-08 16 views
-2

こんにちは私は単純な数学関数(2c-a)/(c + ax)を計算しようとしています。しかし、すべての私の答えは、与えられた0 いくつかの理由: - B、B - C、W - W、X - Y、W - 任意のアイデアをシンプルなアセンブリ数学の計算

MOV ax, 2 
MUL c ; dx:ax=2c 
JC kl1 ; sandauga netilpo i ax 
XCHG ax, dx 
MOV al, a 
XOR ah, ah 
ADD dx, ax ; c^2-a 
JC kl1 
MOV al, a 
MUL x[si] ; a*x 
JC kl1 ; sandauga netilpo i ax 
ADD bx, ax ; ax+c 
JC kl1 
CMP al, 0 
JE kl2 ; dalyba is 0 
MOV ax, dx 
XOR dx, dx 
DIV bx ; ax=rez 
re: 

B感謝を。エラー 式=(2 * C-A)/(C + * xを)発生短い問題があるので

+1

このx86アセンブラはありますか?質問には、適切なプロセッサや命令セットでタグ付けする必要があります。 –

+1

デバッガを使用してプログラムをシングルステップ実行し、どこがうまくいかないかを確認します。まず、 'ADD dx、ax'は' + a'のように '-a'を計算するようには見えません。そして、 'MUL x [si]'はあなたの結果があったところで 'dx'を破壊します(バイトサイズの乗算でない限り)。また、私たちは 'x [si]'が何であるか知りません。次に、 'bx、ADD bx、ax'を実行します.bxには何もロードされません。 – Jester

答えて

0

MOV斧、Cをこの例に従います。変数cを持つロード・アックス

shl ax、1;マルチプレイc * 2

sub ax、a; 2c-a

mov parte1、ax;結果を保存する

mov ax、a;変数aを持つロード・アックス

mov bx、x;変数xでbxをロードする

mul bx; ax = a per x

add ax、c; c + ax

mov parte2、ax;格納結果

プッシュアックス;可変parte1と負荷AX 発現

ポップBXの最初のオペランドである式

MOV斧、parte1の最後calcolus第二オペランドを保持します。式の第2オペランドである変数parte2でbxをロードする

div bx; risultato = parte1/parte2 =斧:DX

斧= int型の一部 DX =残り

私はあなたをHELしたいと考えています。