輕松匯編怎樣生成目標文件
『壹』 輕松匯編的操作指南
第一步 基本的編輯功能
這里是介紹基本的編輯功能,就像在介紹Windows自帶的記事本。
文件菜單:
新建:新建一個文件,快捷鍵為 Ctrl+N ;
保存:保存當前文件,快捷鍵為 Ctrl+S ;
打開:打開一個文件,快捷鍵為 Ctrl+O ;
退出:退出輕松匯編 ;
另存為: 把正在編輯的文件存扮閉為另外一個文件 ;
最近使用過的文件:在這里紀錄了您最近使用過的文件,可以快速打開。
如果您不希望別人看到您編輯過什麼程序,可以點擊「清空全部紀錄」。
編輯菜單:
全選:選定正在編輯的全部內容,快捷鍵為 Ctrl+A;
復制:復制選定的內容到剪貼板,快捷鍵為 Ctrl+C;
剪切:復制選定的內容到剪貼板,並刪除所選定的內容,快捷鍵為 Ctrl+X;
粘貼:把剪貼板中的內容復制到編輯窗口,快捷鍵為 Ctrl+P;
刪除:刪除選定內容,快捷鍵為 Del;
撤消:撤消上一步操作,快捷鍵為 Ctrl+Z,但是注意只能撤消一次。
查找菜單:
查找:在所編輯的文件中查找字元串,快捷鍵為 Ctrl+F;
替換:在所編輯的文件中把一個字元串替換為另一個,快捷鍵為 Ctrl+R;
查找下一個:從當前游標起,查找下一個,快捷鍵為 F3;
第二步 編寫一個匯編程序
打開輕松匯編就自動為您新建了一個模板,直接在上面添加數據定義和代碼就可以了。一般來說,都是先寫堆棧段。輸入「stacks segment stack」,用空格隔開關鍵字。然後按下回車鍵換行——您會看到,輕松匯編自動把剛才輸入的那一行程序的格式整理好了。
第二行是堆棧的大小了,應該輸入「db 128 p(0)」,輸入「bd 128 p(0)」試試,會怎樣?在換行時沒有整理格式。如果您輸入的匯編程序有拼寫錯誤,輕松匯編會檢測出來,並且拒絕整理錯誤行的格式,這時候您就可以避免這類簡單而又隱蔽的錯誤。當然,如果您確定您輸入的是正確的,而輕松匯編沒有整理格式,或整理的格式不好看,請告訴我這個錯誤,不勝感激,聯系方式見左側小字。在您編程的過程中,左側的導航欄會隨時更新您的語法信息,可以通過導航欄來快速定位您的語法元素。
接著,把您所想要寫的程序寫完,進行下一步:編譯、運行一個程序。
如果是以前寫的程序,在輕松匯編中打開後,點擊:運行「整理格式」,輕松匯編會對整個程序格式進行整理。
第三步 編譯、運行一個匯編程序
把寫好的匯編程序編譯、運行一下,熟悉操作。
點擊:運行-生成目標文件,輕松匯編就會自動生成目標文件,另外,根據您的設定(如何設定,則賣請參見第四步),還會生成其他的文件。默認是生成交叉文件和映像文件,點擊右上角的按鈕就可以看到這兩個文件(這兩個文件的作用,請參見疑難解答)。
如果有語法錯誤,編譯會失敗,錯誤信息會顯示在下面的窗口中,點擊錯誤信息,錯誤行就會突出顯示出來。
點擊:運行-運行,輕松匯編就會會自動完成編譯、鏈接、運行當前程序。在程序運行時是全屏方式,結束後變成窗口方式,不會退出。
點擊:運行-調試,輕松匯編就會自動完成編譯、鏈接、調試的工作,使用的是TD作為調試工具。
就這些了,因為在輕松匯編下編譯、運行一個程序確廳盯裂實簡單。
在匯編時還有其他的可能,那麼,請進行第四步:讓匯編變的更輕松。
第四步 讓匯編變得更輕松
對輕松匯編進行個人設置,讓它更符合您的習慣。
在輕松匯編中根據初學者的特點,提供了很有特色的功能,如果您不喜歡的話,可以關掉它,對於運行的參數,同樣也是通過設置來改變的。下面我們一一介紹:
在設置中:
格式設定:在這里的下拉框中有三個選項,全部大寫、全部小寫和不處理,選定後的結果是在進行格式處理時對格式化結果的處理。
自動整理格式:選定後在換行的時候會對原來行進行格式整理,如果沒有選定就不整理格式。
採用調試模式:選定後在編譯時包括參數/zi,在鏈接時包括參數/v,這樣生成的可執行文件比較大,包含了用TD調試時所需要的信息,可以實現源代碼調試;如不選定,不能實現源代碼調試,在調試的時候不太方便。推薦選定該選項。
編譯生成Com文件:選定該選項後在鏈接時包括參數/t,如果你寫的是一個com文件的匯編代碼,那麼就可以選定以生成一個com後綴的文件。在選定該選項後調試時不能實現源代碼調試,所以最好在編寫、調試的時候不選定,最後調試通過後再選定該選項生成com文件。如果不選定,即使是com文件的匯編代碼也是可以編譯通過,只不過生成的是一個Exe文件。推薦不選定。
自定義參數:就是自己提供TASM和TLink的參數了,如果你對TASM了解比較多,可以實現其他的參數功能,但是對於一般的學習者,並不需要自定義參數,以免造成程序運行時出問題。
程序格式:在這里控制格式整理的方式,您可以自己設置後看看效果。不過推薦用默認方式。
顯示導航欄:選中後顯示導航欄,否則不顯示。
顯示錯誤欄:選中後顯示錯誤欄,否則不顯示。(推薦選中,如果不選中,有錯誤它是不會自動顯示的。)
『貳』 輕松匯編中主程序如何與子程序鏈接子程序編譯成功後都可以連接,主程序編譯後連接錯誤顯示undefined sym
是多拆缺個文件還是一旅蠢辯個文件啊?如果是多個文件……當然是可以做到的,但是需要你首先依次打開各個文檔彎件,編譯,生成目標文件(obj),然後重新打開主程序,修改輕松匯編的鏈接參數,鏈接……挺麻煩的,還不如直接用命令行,因為輕松匯編的設計就只考慮支持一個匯編文件,沒考慮多個文件的問題。
『叄』 匯編語言上機環境...
Subject:匯編語言上機指導及例示
Editor:admin Time:2004-3-20 20:18 Read:52369 Score:8 Print
Preface:
從如何建立源文件到進行調試作下簡要的介紹......
Content:
從如何建立源文件到進行調試作下簡要的介紹,並配例題說明。由於本人水平有限,在下文在如有錯誤及可以進一步修改的地方請大家指出
匯編語言上機過程:
一、上機前的軟體准備:
MS-DOS操作系統(雹友如:MSDOS6.22 , MSDOS7.0 等)
文本編輯器 (如:EDIT.COM , TURBO.EXE , TC.EXE , C.EXE 等)
匯編程序 (如:MASM.EXE , ASM.EXE 等)
連接程序 (如:LINK.EXE 等)
調試程序 (如:DEBUG.EXE 等)
二、匯編程序建立過程:
a.建立匯編源程序—通過———→b.編譯為目標文件— ↓┬—→d.連接為可執行文件
↑
│ c.不通過,重新修改(語句錯誤) ↓
├——————————————————————┘ ↓
↑ f.不正確,用調試工具調試,重新修改(邏輯錯誤) ↓
└————————————————————————————←e運行
↓正確
g.完成
三、現在對(二)的每一個標有字母的過程(PROCEDURE)進行詳細說明
PROCEDURE a:建立匯編源程序(即:建立 文件名.asm)
這個過程就相當於我們在紙上編寫源程序代碼一樣,只不過是將紙變為了計算機,這個過程也稱源代碼錄入。將源程序代碼錄入計算機的方法很多,下面將介紹具體方法。
1.通過MD-DOS自帶的EDIT.EXE文本編輯器進行輸入,在DOS提示符下鍵入:EDIT回車,這時如果你系統內可調用時,EDIT的操作畫面便會出現在屏幕上,你就可在提示下進行錄入了,當錄入完畢後,選擇存檔並給你輸入的文件起一個文件名,形式:filename.asm ;(其中filename為你起的文件名,由1-8個字元組成),asm 是為匯編程序識別而必須加上去的,不可更改。存檔後在DOS下可用DOS命令DIR來查看,如果看到了所存的文件存在,就可以進行進程b。
2.如果你的系統中沒有EDIT,也可用你所熟悉的文本編輯器進行錄入、編輯,如可用c語言和pascal語言的文本編輯器來編輯,最後將文件存為filename.asm的形式即可。
PROCEDURE b:編譯目標文件(即:編譯為.obj .lst .crf文件)
這個過程計算機將把你編的正確的源代碼編譯為機器語言、程序清單及交叉引用表的目標文件。如果此時你的程序有語句錯誤,系統將報錯,並指出在第幾行,什麼類型的錯誤,你源棚槐可根據提示去逐一修改。現介紹具體過程:
在DOS提示符下鍵入MASM filename回車
(註:你系統內的匯編程序為MASM.EXE,如果你系統的匯編程序為ASM.EXE時,便將命令變為ASM filename回車。其中filename為你剛才在PROCEDURE a 中建立的文件名)
這時匯編程序的輸出文件可以有三個(分別:.obj .lst .crf),便會和蘆出現三次提問,在這可以一路回車即可。下面顯示的信息是源程序中的錯誤個數,如果為0則表示順利通過,就可進行進程c。但如果不為0就說明有錯誤,並指出錯誤出現的行,可依據這個提示去進行修改。但如果錯誤太多還未等看清就顯示過去了,可用如下命令形將錯誤信息存於一個你指定的文件,再用文本編輯器去查看。 MASM filename >filen (filen為你起的一個沒用過的文件名,用以存放出錯信息)以後可查看filen來得到出錯信息。
PROCEDURE c:編譯不通過,重新修改(錯誤類型:源程序語句不合法)
在執行過PROCEDURE b後,如有出錯信息時,就要我們自己按PROCEDURE c去做,而不能跳躍到PROCEDURE d去,如果強行執行PROCEDURE d將無任何有效結果。
現在就開現找錯吧!首先要清楚,在PROCEDURE b中檢測出的錯誤均為每一條語句的語法或用法錯誤,它並不能檢測出程序的邏輯設計(語句按排位置)錯誤,所以就要記好出錯的行號。在記錄行號後,就應再次執行PROCEDURE a,這時和操作應是打開已編好的源程序(以EDIT為例:在DOS提示符下鍵入:
EDIT filename.asm回車),依據行號進行修改並存檔,再次進行匯編,直至PROCEDURE b通過為止。便可繼續向下執行PROCEDURE d。
下面給出一些常見出錯信息,以便查對:
1、Register already defined 匯編內部出現邏輯錯誤
2、Unknown symbol type 在符號語句的類型中,有些不能識別的東西
3、Symbol is multi-defined 重復定義一個符號
4、Symbol not defined 符號沒有定義
5、Syntax error 語句的語法與任何可識別的語法不匹配
6、Symbol is reserved word
企圖非法使用一個匯編程序的保留字(例:定義add為一變數)
7、Not proper align/combine type SEGMENT參數不正確
8、One operand must be const 這是加法指令的非法使用
9、Operands must be same or 1 abs 這是減法指令的非法使用
10、Already have base register 試圖重復基地址
11、Illegal size for item 引用的項的長度是非法的,(如:雙字移位)
12、Illegal register value 指定的寄存器值不能放入「reg」 欄位
13、Must be AX or AL 某些指令只能用AX或AL
14、Improper use of segment reg 段寄存器使用不合法(如:mov ds,0)
15、Division by 0 or overflow 給出一個用0作除數的表達式
16、value is out of range 數值大於需要使用的
17、CS register illeal usage 試圖非法使用CS寄存器
18、DUP is too large for linker
DUP嵌套太長,以至於從連接程序不能得到所要的記錄
PROCEDURE d:連接為可執行文件(即:連接為.exe 或.com文件)
在這個過程中一般沒有意外,如果有也就是文件名打錯了。
形式:在DOS提示符下: LINK filename 回車
PROCEDURE e:運行編譯好的可執行文件
當PROCEDURE d通過後,會產生一個可執行文件,這時只需運行這個程序,看它是否按你所想像那樣得出結果。在試運行期間,要盡量試一些臨界狀態,看 程序是否運行穩定、結果是否正確。如一切正常,便可進入PROCEDURE g了。
可最怕的是不OK,程序產生一些莫名其妙的結果(你可不要以為是你的計算機不聽你的指揮,其實它是在一絲不苟地按照你編的程序執行。我以前總以為我的計算機出了毛病),如果是在考場上這時千萬不要慌,穩住自己的情緒,先不要看計算機,靜幾分鍾(反正時間多得是)。這時就要用到最關鍵、最常用的一步了,進行PROCEDURE f 。
PROCEDURE f:用調試工具調試,重新修改(邏輯錯誤)
在這我將介紹用DOS中自帶的調試程序DEBUG.EXE來進行程序調試、檢查錯誤.
首先我們要了解DEBUG的基本用法:
1、用於調試程序時的輸入格式:
DEBUG FILENAME.??? 回車
其中FILENAME是主文件名,???是擴展文件名,例如我們在此前已編譯好了一個文件,它的名子為:djx.exe 要對它進行調試時就在DOS提示符下
打:DEBUG djx.exe 回車,便可見到 '-' 提示符,如無任何提示說明正確,可進行調試。
2、DEBUG調試過程中用到的DEBUG命令介紹:
(註:在指令中用 [] 括起來的內容可預設)
1)D(Dump)顯示指定內存單元內容(一般用來看數據數的內容,即DS段):
格式:d[地址] 從[地址]指定的內存單元顯示128個位元組的內容
[地址]預設時,顯示上一個DUMP命令後面的內容
d 地址范圍 顯示指定范圍內的內存內容。
示例:-d100 顯示從DS段100H開始的內容(以十六進制顯示)
2)E(Enter)修改存儲單元內容(一般在DS段)
格式:e 地址 [數據] 用給定的[數據]代替指定范圍的存儲單元內容
e 地址 修改一個指定內存單元的內容
示例:-e ds:200 'djx'FF00AA 就可將DS段從200開始至205的內容替
換為64 6A 78 FF 00 AA
3)G(GO)運行命令
格式:-g [=地址][斷點地址1 [斷點地址2 ...[斷點地址10]]]
從指定[地址]開始執行程序(如地址預設從當前CS:IP開始),運行至[斷點地址1]停止,顯示所有寄存器及標志位內容與下一條指令,如後面還有斷點,可鍵入g,繼續執行。
示例:-g001a 則執行從當前cs:ip至001a的指令
注意:地址設置必須從指令的第一位元組設起。
4)T(Trace)執行一條語句
格式: -t [=地址] 從指定[地址]起執行一條語句後停下來,顯示所有寄存器內容及標志位的值與下一條指令。如[地址]預設則從當前CS:IP開始執行
-t [=地址][value] 從指定地址起執行value條指令後停止。
5)P(proceed)執行一個循環;一個軟中斷或call子過程
格式:-p [=地址][n]
示例: mov ah,02h
mov dl,41h
int 21h
此時用: -p 回車後系統將顯示一個字元A,如果在這不用P,而改用T,那麼系統將進入INT 21H的中斷調用中,出不來,這時你會誤以為你的程序編錯了,一定注意!!
6)R(register)顯示並可修改寄存器內容
格式:-r 顯示所有寄存器內容
-r 寄存器名 修改指定寄存器內容(可改:AX,BX,CX,DX,SP,
BP,SI,DI,CS,DS,ES,SS,PC,IP,F)
7)U(Unassemble)反匯編
格式:-u [地址] 從指定[地址]反匯編32個位元組,若[地址]預設則從當前地址匯編32個位元組。
-u 地址范圍 對指定范圍內的存儲單元進行反匯編
以上是在調試程序中可能用到的DEBUG命令解釋,DEBUG中還有其它命令,在檢查程序中不會用到,就不再介紹了。
PROCEDURE g:程序編好,那就一切OK!!!交卷過關了!大吃、大睡。
下面給出一個有病句的程序,希望大家和我一起調試、修改並通過:
先執行PROCEDURE a編輯源程序
實現功能:在屏幕上顯示:Hello world
My name is DJX
文件名:error.asm
行號: 源程序代碼:
1 data segment
2 out1 db 'Hello world'
3 ax db 'My name is DJX'
4 data ens
5
6 code segment
7 assume cs:code;ds:data
8 lea dx,out1
9 mov ah,2
10 int 21h
11
12 mov dl,0ah
13 mov ah,2
14 int 21h
15 mov dl,0dh
16 moo ah,2
17 int 21h
18
19 lea dx,ax
20 mov ah,
21 int 21h
22 code ends
在編輯完執行PROCEDURE b用masm進行編譯:masm error回車後顯示如下:
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.
Object filename [error.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
End of file encountered on input file
error.ASM(23): warning A4085: End of file, no END directive
Open segments: DATA
error.ASM(3): warning A4016: Reserved word used as symbol: AX
error.ASM(4): error A2105: Expected: instruction or directive
error.ASM(16): error A2105: Expected: instruction or directive
error.ASM(19): error A2049: Illegal use of register
End of file encountered on input file
error.ASM(23): warning A4085: End of file, no END directive
51566 + 406450 Bytes symbol space free
2 Warning Errors
4 Severe Errors
說明這個程序有錯誤,並在第3,4,16,19,23行有錯,
我們再執行PROCEDURE c去逐一檢查
第三行:3 ax db 'My name is DJX'
它的錯誤在於AX不能作為變數名,更正:
3 out2 db 'My name is DJX'
注意剛才我們定義AX為變數時在後面的程序中用過'變數AX'在第19行
19 lea dx,ax
在出錯報告中也報第19行錯,因為不能將AX的有效地址賦給DX,更正:
19 lea dx,out2
這樣一下就解決了兩個錯誤
第四行:4 data ens
這行為一個段的結束,但語句漏打了字母,更正:
4 data ends
第十六行:16 moo ah,2
這行也是語句打錯,更正:
16 mov ah,2
第二十三行:
出錯信息:error.ASM(23): warning A4085: End of file, no END directive
說明本程序沒有結束偽操作,更正:
加入:在第七、八行加入地址標志: start:
原23 end start
執行PROCEDURE a將源程序修改如下:
data segment
out1 db 'Hello world'
out2 db 'My name is DJX'
data ends
code segment
assume cs:code;ds:data
start:
lea dx,out1
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h
lea dx,out2
mov ah,9
int 21h
code ends
end start
再次進行PROCEDURE b進行編譯,屏幕顯示:
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.
Object filename [error.OBJ]:
Source listing [NUL.LST]:
Cross-reference [NUL.CRF]:
51524 + 406492 Bytes symbol space free
0 Warning Errors
0 Severe Errors
本程序在語句上已無錯誤。
再執行PROCEDURE d連接為可執行文件(link error回車),屏幕顯示:
Microsoft (R) Overlay Linker Version 3.60
Copyright (C) Microsoft Corp 1983-1987. All rights reserved.
Run File [ERROR.EXE]:
List File [NUL.MAP]:
Libraries [.LIB]:
LINK : warning L4021: no stack segment
這時error.exe可執行文件已存在,可以執行PROCEDURE e來運行看一看是否正確
在dos提示符下鍵入:error回車(小心!!!)
屏幕顯示:亂碼,並死機。reset My computer!
說明程序在邏輯上有錯誤,並且嚴重。
這是就要用PROCEDURE f,用調試工具調試,查找錯誤。
在DOS提示符下鍵入:debug error.exe回車
屏幕出現 - 提示符,這時就可以用DEBUG的命令來找錯誤了,
我首先用d命令來查看數據區和內容,發展所定義的兩個字元串並不在數據段的段首,而在數據段內的100h位置上,這時才想起masm有一個不成文的規定,那就是在定義完數據段後,所定義的變數均向後100h個單元,需要我們將ds段寄存器置位,在程序的start:後面加上如下指令:(執行PROCEDURE a)
mov ax,data
mov ds,ax
再執行PROCEDURE b,PROCEDURE d,PROCEDURE e來運行程序,
屏幕顯示:
換行
My name is DJX及亂碼,並死機。(又要重新啟動!)
再次執行PROCEDURE a檢查程序,發現:
1.匯編語言有規定每個字元串應由$結尾
2.在輸出第一個串的語句中的AH子功能號應為09H
將以上兩點改正。
再執行PROCEDURE b,PROCEDURE d,PROCEDURE e來運行程序,
屏幕顯示:
Hello world
My name is DJX並死機,不能返回DOS
原因分析,在程序中沒有返回DOS的指令,更正:
用PROCEDURE a來進行編輯:
用DOS 21H中斷的4cH子功能便可返回DOS,在code ends前加:
mov ah,4ch
int 21h
再執行PROCEDURE b,PROCEDURE d,PROCEDURE e來運行程序,
屏幕顯示:
Hello word
My name is DJX
並返回DOS
成功!
這樣一個程序就調試完成,並正確。
下面是正確的源程序:
data segment
out1 db 'Hello world$'
out2 db 'My name is DJX$'
data ends
code segment
assume cs:code;ds:data
start:
mov ax,data
mov ds,ax
lea dx,out1
mov ah,9
int 21h
mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h
lea dx,out2
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end start
以上這個程序很簡單,只是為了說明實現匯編語言的上機編程及調試過程,匯編語言須多練習才能掌握它的特點,以便順利通過考試
『肆』 64位系統下怎麼把asm文件變成obj文件
用dosbox吧,模擬dos環境,編出來的exe也只能在dosbox下運行
『伍』 求助匯編!用輕松匯編為什麼在生成目 標文件時老是說鏈 接失敗啊編 譯明明成功了
親 輕松匯編是什麼東東
你用什麼匯編語言啊?
你用什麼編譯器啊?
『陸』 有沒有人用過輕松匯編,為什麼我用的時候在編譯的過程一開始彈出錯誤然後就是成功可是卻無法生成文件。
不清楚啊!!!自己重新安裝試試!!!!
『柒』 輕松匯編的疑難解答
交叉文件和映像文件是什麼
交叉文件和映像文件是編譯過程和結果的詳細顯示。其中交叉文件是在第二遍掃描中建立的,映像文件是對可執行文件的說明,所以只有生成了可執行文件,才會有映像文件,但是只要不發生嚴重錯誤,就有交叉文件。
學會閱讀交叉文件對於理解匯編原理更加重要,交叉文件說明如下:
1、編譯後的機器代碼和匯編語言的對應關系。
在交叉文件的主體部分,就是說明編譯後的機器代碼和匯編語言的對應關系的,分為三列,第一列是編譯後機器代碼在內存中的地址,第二列是編譯後的機器代碼,第三列就是你寫的匯編語言和注釋。要注意的是,在交叉文件中的數字全部都是用十六進製表示的,沒有十進製表示的數字。
下面是一段交叉笑正文件的原文:
000E B1 02 MOV CL,2 ;把2送到CL中
0010 F6 E9 IMUL CL ;CL中的數值和AL中數值相乘
0012 FE C0 INC AL ;AL中的數值加1
第一列是對應指令在內存的地址,第一條指令「MOV CL,2」的起始地址是000E,佔了兩個位元組(B1 02),所以第二條指令的起始地址是0010。
第二列是編譯後的機器指令,第一條指令「MOV CL,2」編譯後的機器代碼是「B1 02」,其中B1表示:1)是MOV指令;2)定址方式是立即數定址;3)使用的是CL寄存器。02表示操作數是02H,十六進制數2。第二和第三條指令也是以此類推,查看一下指令格式就可以了。編譯後的可執行文件里寫的就是第二列的內容,您可以用UlTra Edit等十六進制編輯器打開看一看。
第三列就是被編譯的匯編指令。
2、宏擴展情況。
在存在著宏擴展的部分,都用「1」標出,如下所示:
0024 E8 0035 CALL PINISET
MOUTPUT CLINE ;輸出CLINE
0027 BA 0001 R 1 MOV DX,OFFSET CLINE
002A B4 09 1 MOV AH,09H
002C CD 21 1 INT 021H
在這段程序中,事先定義了宏MOUTPUT:
MOUTPUT MACRO PSTR ;輸出PSTR
MOV DX,OFFSET PSTR
MOV AH,09H
INT 021H
ENDM
而CLINE是一個數據。
您可以看到,宏被擴展成的三條指令都用「1」標出來了。
3、錯誤列表。
在交叉文件的匯編語言的錯誤行的上面標出了錯誤原因、錯誤行、和錯誤類別,在交叉文件的最後,還列出了總的錯誤數。
4、段、子程序、宏、變數的清單。
在交叉文件的最後部分是對匯編程序中所有的段、子程序、宏、變數的清單,列出了它們的起始地址、值、類型等特徵。
學會閱讀交叉文件,可以對了解指令格式、編譯原理有很大的幫助,而且通過閱讀交叉文件,可以了解實際的宏擴展情況,有利於程序排錯。
為什麼語法錯誤的提示信息是亂七八糟
輕松匯編調用的是TASM 5.0作為內核編譯匯編程序的,錯誤信息也是通過TASM 5.0來截獲的。為了簡便安裝,把TASM 5.0功能實現所需要的最少的幾個文件附帶安裝了,它們是TASM.Exe,TLink.Exe,TD.Exe,RTM.Exe。
其中,TASM.Exe的版本是4.1,TLink.Exe的版本是7.1.30.1。如果發生了上述情況,很可能是被替換成了不同的版本,您可以再其他地方拷貝一個相同版本的過來。或者重新安裝輕松匯編。現在網上很多TASM5就是輕松匯編所調用的。
為什麼運行結果和匯編源代碼不一致呢
在有些情況下,會發生這種問題:修改了源代碼以後再運行程序,運行的結果卻是修改以前的,似乎修改的沒有效果!
解決這個問題的辦法是在修改源代碼以後,都要先編譯(Ctrl+F9),在編譯通過後,再鏈接(F9),然後再運行或調試,否則修改就沒有效果。
之所以會這樣,是因為在輕松匯編中,編譯只負責把匯編的源代碼編譯成目標文件(*.obj),而鏈接只負責把已有的目標文件鏈接成可執行文件(*.exe),而運行只負責運行已經存在的可執行文件,調試也只負責調試已經存在的可執行文件。這是符合在命令行下寫匯編程序的規則的碰歲悔。
在這種情況下,如果你先打開一個匯編程序,第一次編譯、鏈接、運行或調試,都很正常。接著,你修改了源代碼,再運行,結果肯定是修改以前的,因為可執行文件還是按修改前的源代碼生成的,鏈接一遍再運行,結果還是修改以前雀物的,因為目標文件是按修改以前的源代碼生成的,那由此生成的可執行文件自然也是按修改以前的代碼生成的了。所以必須重新編譯一遍再重新鏈接一遍,然後再運行或調試,就沒問題了。