發信人: hmkang@ms2.hinet.net (Tomas Kang) 日期: 24 Jan 2000 16:27:14 GMT +0800 標題: Re: 問一個簡單的組語問題... 信群: tw.bbs.comp.language 看板: 來源: <01bf6644$5460c2e0$f0e887cb@hinet.net>:24535, t232-240.dialup.dj.net.tw 組織: 哇哩咧... 次寫入到主題 <3YYGKT$w1i@bbs.ee.ncu.edu.tw>... > >==>發信人: "Tomas Kang" , 信區: programming > >駱駝 次寫入到主題 > >> 以下是小弟在寫一段程式時的錯誤... > >> 但....這是我節錄課本的程式 > >> 但在Dos masm 此檔時 > >> 始終有誤..... > >> 電腦的回應是以下: > >> ch61.asm(162): error A2022: instruction operands must be the same size > >> 我的其中原始碼: > >> .data > >> invalidinputmessage db "invalid input",0dh,0ah,0 > > ^^ 對MASM而言, 如同byte宣告. > > 雖然 DB 和 BYTE 宣告是一樣的, 但是和這個應該是無關的... > > >> .code > >> extrn writestring:proc,crlf:proc,clrscr:proc > >> displayerror proc > >> push dx > >> 162 mov dx,offset invalidinputmessage > > ^加個 word ptr 就可以了. > > DX 為一個word, 所以, 如果Operand不是明確宣告為word, > > 則需使用word ptr 來casting. 這一點與offset directive無關. > > 純粹是MASM要求的簡單的防誤的type-checking設計. 所以 > > 如果使用LEA, 也是一樣, 必須寫成 > > LEA DX, WORD PTR invalidinputmessage > > 纔對. > > 根據測試的結果, > mov dx,offset invalidinputmessage > 和 > mov dx,offset word ptr invalidinputmessage > 效果一樣, 而 > lea dx,invalidinputmessage > 和 > lea dx,word ptr invalidinputmessage > 一樣, 但是在特定條件下, 用 mov 會出錯而用 lea 不會出錯, > 請參看後面的三個程式列表 > > >> call writestring > >> call crlf > >> pop dx > >> -- > >> > >-- 市隱 > > > 列表一: <略> > > 所以, 問題應該是出在 .386 和 .model 放置的前後關係上, 導致 > MASM 使用 32bit register 才產生的 > > 噢! 謝謝指正. 我得承認我對MASM的瞭解仍停在多年前的5.1上. 印象中, 常常就是為了加上這個word ptr或是dword ptr, 煩得很. 近幾年早已不寫組語了, 反而還得將早期組語寫的函式庫模組轉 寫成C. -- 市隱 .