![]() |
組合語言作業又來了...小弟誠心拜託大家...
小弟依然看不太懂他的意思...
這次的題目是要使用者輸入字串~然後大寫換小寫 我不懂怎麼輸入字串阿~冏rz...小弟誠心請大家幫忙~感恩~ :decfghi6: 語法:
WriteString PROC |
不知版有有無MASM工具書
個人組合語言也幾乎不記得 而之前的回復是參考以前的舊課本 80x86與MASM 6 組合語言 複習一下 查出來的 言歸正傳 原本最簡單的鍵盤字串輸出入可用 mov ah,0AH int 21H 輸出用 mov ah,09H int 21H 但看了一下版友的題目 似乎在輸入的同時作 判斷 轉換 而 WriteString 、ReadString、Crlf 這些副程式就是要實作的地方 語法:
ReadString PROC NEAR 語法:
ReadString MACRO 0Dh,0Ah 是一個換行字串 也就是題目所提到的 Enter 鍵 stringIn 是擺放輸入的字串 (記憶體變數) MAX 最多可輸入字串長度 ECX 計數暫存器,上面是用來記載 standard input(標準輸入裝置,大多是指鍵盤)的buffer長度 (不包含null字元) EDX 是用來指向buffer的位址 EAX 累加暫存器,上面是用來 表示你輸入了幾個字 (以上 buffer 是指鍵盤的緩衝區) EDX的使用配合 int 21h的話 語法:
GetStr MACRO buffer 語法:
.data 同樣寫成巨集 語法:
ShowStr MACRO message 語法:
.data |
我有試著寫了一個~但是執行EXE檔的時候~他沒有出現東西~QQ :decfghi6:
請大大給小弟一點指導~ 語法:
INCLUDE Irvine32.inc |
call ReadString
call Writestring call Crlf 這三行沒有把副程式寫出來...? 不知您用的是什麼組合語言軟體 ? mov edx, OFFSET prompt 相當於 lea edx,prompt ;把prompt變數的偏移位址傳入edx,使prompt變成鍵盤的緩衝區 這一段 語法:
mov edx,OFFSET prompt ;顯示對話,印出edx裡面的字串 如是要 "顯示對話,印出edx裡面的字串" 請參考前面講的 語法:
ShowStr MACRO message lea edx,**要顯示的字串** ;獲得其偏移位址 int 21h |
我用的是MASM615~後來看了一下
原來是我放錯地方了@@ 寫的差不多了~只是有點小BUG~ 大轉小是OK的~小轉大有點問題~例如我輸入kinco 他會出現KiNcO ~小弟看了很久~找不到問題在哪~ :decfghi6: 請大大~有發現問題所在的話~告知小弟一下~謝謝~ :ddrf567h: 語法:
INCLUDE Irvine32.inc |
看了老半天...
後來翻書才找出問題癥結 cmp、or 及 inc 指令會影響 ZF(零值旗標,當運算結果為零時ZF=1) je 指令會參考 ZF作抉擇 (ZF=1時即為等於 執行跳躍動作) 種種複雜的 ZF變動 如果之前 ZF=1 cmp al, 11111111b 結果 又不對ZF作清除 (cmp是一個減的測試動作 al-ffH 不等於0,ZF不動 ※如果ZF=1 保持1 如果為0 保持0) 則還是會執行(跳到) "小->大" 所以你的結果才會 每隔一個字元才作一次 "大->小" 只要在 cmp al, 11111111b 前將 ZF強制變為 0 即可 針對 FL 旗號暫存器的第6bit作 and FL,1111111110111111b 即可 以上因為沒有MASM作實際測試 所以是不是果真如此...不敢打包票 ^^|| |
有 ~我改完了~一直忘了貼上來~qq~
語法:
INCLUDE Irvine32.inc |
所有時間均為台北時間。現在的時間是 03:22 AM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *