![]() |
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=1137057)
|
---|
求助 組合語言問題
目的為得到輸入文字,作為日後比對正確性..
假設我輸入ABCDEFG lea ebx,[esp+18] //這行[esp+18]是輸入的文字 push ebx mov ebx,[ebx] mov [00486E00],ebx //將[esp+18]放入00486E00 這位置是固定的不會動 pop ebx 可是00486E00位置的值得到的卻是ABCD 也就是DWORD的長度 要如何解決這問題? 幫幫忙吧 :nonono: |
你應該是要把 esp + 18 用 rep movsb 搬到 486e00 吧, 你從 esp+18 放到 ebx 再從 ebx 放到 486e00 本來就會只有 32bits
你要先搞懂何謂 pointer .. 跟 memory address... |
引用:
我還記得我們的期末作業是用組合語言寫一個可以放大字型的程式。 老師說沒交的這門課就死當。 :laugh: 我。。。有交,但是交了C與ASM混合的. 於是得 60分. :laugh: |
上面的代碼要如何改呢?
我查了一下 rep movsb,就這一行指令,沒有其他語法 功力很差,整個概念不是很懂 只能先求答案再思考進而了解 |
首先你要先確定輸入的字有多少個,不然你怎知要存放多少?
既然知道輸入字數,與要比之字串字數一比,不同當然就不用比了,除非允許輸入字超出比對數。 而指令可去抓 http://1drv.ms/1LQQyc0 內的PDF,然後詳看以下頁數(雖說是486CPU指令,但也可用現今CPU。建議以以下次序查閱): PAGE. 94 , 71 , 63 , 118 , 28 , 29 |
1個附加檔案
引用:
不知有影沒影: https://life.tw/?app=view&no=186283 |
引用:
lea ebx,dword ptr [esp+18] push ebx mov ebx,dword ptr [ebx] mov dword ptr [00486E00],ebx mov ebx,dword ptr [ebx+4] mov dword ptr [00486E04],ebx pop ebx |
上面寫錯了 :think:
應該多用一個暫存器, 如果輸入的字串是固定長度(8-byte) lea ebx,dword ptr [esp+18] push ebx push eax // 多備份一個EAX mov eax,dword ptr [ebx] mov dword ptr [00486E00],eax mov eax,dword ptr [ebx+4] mov dword ptr [00486E04],eax pop eax pop ebx |
引用:
上面代碼看似把被切掉的Dword搬移到下一組位置 那麼如果字串長度不一定呢...是否只能用 rep movsb 我下班再下載pdf研究 另外問個企鵝Linux 的問題... 如果同樣是X86CPU,是否能像上例子 去獲得想要的字串? 甚至像win32程式去call windows的API,跳出對話框之類呢? 感謝各位指點 |
那個字串會在那個位置一定是有程式搬過去的,誰搬的,沒其他資訊?
長度不一定的話如何判斷長度,結束字元為何? winapi當然只有在win底下才能呼叫,linux有自己的api吧. |
所有的時間均為GMT +8。 現在的時間是01:38 AM. |
vBulletin Version 3.0.1
powered_by_vbulletin 2025。