我在嘗試在彙編程序中解決這個表達式時遇到了一些問題。在彙編程序中將單詞轉換爲雙字
`$`z=(5*a-b/7)/(3/b+a*a)
我想知道你如何轉換一個字一個雙字(無符號的解決方案),
我一定要使用CWB命令或我使用AX:BX
,如果我必須使用那些最後的寄存器,
我該如何正確編寫命令?
我將在DosBox下的Turbo Debugger中測試代碼。 我完整的代碼
assume cs:code,ds:data
data segment
;
a db ?
b db ?
rez dw ?
;
data ends
;
code segment
;
mov ax,data
mov ds,ax
;
;
;#####prima paranteza
;
mov al,a ;ah=a
mul 5 ;ax=a*5
mov cx,ax ;cx=ax
mov ah,b ; il mut pe ah in b (pregatire pt conversie fara semn)
mov al,0 ; l-am convertit pe b in word (pe 2 octeti)
div 7 ; am impartit double word-ul b la 7 , catul a ramas in ah , restul a ramas in al
sub cx,ax ; (am tinut cont de faptul ca in ax a ramas rezultatul dupa impartire) , cx=cx-ax, a*5 - b/7
;
; ####a 2 a paranteza
;
mov ah,3
mov al,0 ; conversie de la b la w (fara semn)
div b ; ax=3/b
mov bx,ax ; bx = ax
mov al,a
mul a ; ax = a * a
add ax,bx ; ax = ax + bx
;
;
; #### calcul final
mov bx,ax ; bx = ax (rezultatul celei de a 2 a paranteze)
mov ax,cx ; ax = cx (rezultatul primei paranteze)
順便說一句,我會指定的CPU架構,儘管這看起來像x86彙編 –
什麼是您的規範說的?你想在哪個寄存器對中表達結果?無論如何,答案只是爲了清除上半部分。 (例如,xor dx,dx) –
如果您有Turbo Debugger,那麼您也有Turbo C.在C中編寫表達式,然後使用調試器查看生成的機器代碼。下一步是然後**不**轉換該代碼,但只是調用它。 –