![]() |
PCDVD數位科技討論區
(https://www.pcdvd.com.tw/index.php)
- 七嘴八舌異言堂
(https://www.pcdvd.com.tw/forumdisplay.php?f=12)
- - 詢問『組合語言』加減乘除的問題
(https://www.pcdvd.com.tw/showthread.php?t=430233)
|
---|
詢問『組合語言』加減乘除的問題
剛學組合語言把書本範例改過寫出
X=(A*3+B*4)/E-2 引用:
編譯出來會有顯示 MOV CX,E 這一段有問題,書上原範例是DW...改DB後被除數是AX商AL餘AH ,想了很久找不出解,不知道站上有誰知道^^ 引用:
麻煩大家解答了,謝謝 |
A*3+B*4
--------- =X E-2 我改了一下,可以編譯了 不過功能沒出來 我看不懂你題目的意思,說明白一點好嗎 X是A*3+B*4嗎 E-2又是幹麻的 |
引用:
其實是算出 X=A*3+B*4/E-2 (我編輯過了,還是有人看不懂....呵呵) 然後用DUBUG看記憶體的變化....X是結果,E-2是E DB 5減2 ....wattlu兄能把改的地方講出來嗎...不然我又要自己摸了...謝謝 |
基本上,我覺得我好像幫不上什麼忙,先說聲抱歉
我不明白DW改成DB的用意是? MOV CX,E這個用法是錯誤的,錯在哪?錯在你定義E DB 5 你自己想想看MOV CX,AL這種寫法成立嗎? 答案是不成立,8bit的東西不能直接放到16bit 我把我想出來的方法給你參考一下,不保證有用,因為我不會用DEBUG=.=,所以沒辦法驗證 用CBW指令:把AL轉成有號數AX IMUL A ADD AX,CX ADC DX,BX ...mov bx,ax ;暫存,因要用到al ...mov al, e ...cbw ;al轉成ax 8bit放到16bit ...mov cx,ax ;這一步完成你之前的mov cx,e ...mov ax,bx ;放回 SUB CX,2 IDIV CX MOV D,AL MOV DR,AH .EXIT END 再次強調一下,我不明白你到底要將原本程式用什麼的寫法去改寫? 單純是將e dw 5 改成e db 5嗎? 因為我不知道你要用什麼去改寫原本程式...所以想的方法可能幫不上忙 |
引用:
謝謝你的回答^^,我就是要把原本的DW改成DB來加減乘除,至於CX是原本範例程式的內容,我只把他當暫存器沒考慮是否是16位元....那MOVZX這個指令沒有用嗎?這個指令不是把八位元轉成16位元嗎~我知道為什麼CX是WORD了.....(新手別見怪) |
我會用DEBUG了
我之前打的程式有溢位、有錯 晚點再幫你修改 我要去烤肉了 |
組合語言有夠難懂的,說是火星文還真的一點都不為過啊........
|
引用:
謝謝...我已經改好了 引用:
因為BX在那一段以後就沒有用了,所以使用它的低位元組BL.....不知道這樣對不對...呵呵^^還沒測試 |
引用:
改出來了...wattlu兄請查看是否對^^ |
MOVZX 是386以上才有的指令,沒見你在原始程式啟用386以上的指令。
另 A*3+B*4 用移位做即行(左移) A*3 可為 A左移1bit(*2)+A本身就是*3了 B*4 B左移2bit就是了 以上連乘法指令都免了 除法,用右移即是了,所有數值是整數比較好做。 |
所有的時間均為GMT +8。 現在的時間是12:39 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。