汇编 - ORG指令详解
生活随笔
收集整理的這篇文章主要介紹了
汇编 - ORG指令详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ORG指令
ORG是Origin的縮寫:起始地址,源。在匯編語言源程序的開始通常都用一條ORG偽指令來實現規定程序的起始地址。如果不用ORG規定則匯編得到的目標程序將從0000H開始。例如:
? ??????????ORG 2000H
???START:MOV? AX,#00H
匯編語言源程序中若沒有ORG偽指令,則程序執行時,指令代碼被放到自由內存空間的CS:0處;若有ORG偽指令,編譯器則把其后的指令代碼放到ORG偽指令指定的偏移地址。兩個ORG偽指令之間,除了指令代碼,若有自由空間,則用0填充。
預處理-->編譯-->匯編-->鏈接,這是高級語言的編譯全過程。對于純匯編,就只有匯編和鏈接兩個步驟。org指令是鏈接時使用的,不是匯編那一步使用的。即不是cpu的一條指令,而是給編譯器看的偽指令。在51單片機、x86 dos、win32 exe中實現都有差異。以最簡單的51單片機為例,編譯器最終鏈接生成HEX文件,再燒錄到51的rom中去。單片機很簡單,沒有x86的分段、分頁,啟動就是從rom的0x0的位置開始執行。同時0x30H位置開始存放中斷向量, 所以單片機程序一般開頭就是:? ORG 0000H? AJMP MAIN? ORG 0030H這里的ORG 0000H指令,使得程序鏈接成HEX文件時,AJMP MAIN這條指令的機器碼就在HEX文件的0x0位置。這是鏈接器的工作。至于x86 dos和win32 exe,ORG的實現就復雜了,ORG不再是絕對定位,只能在一個段里相對定位。
ORG是Origin的縮寫:起始地址,源。在匯編語言源程序的開始通常都用一條ORG偽指令來實現規定程序的起始地址。如果不用ORG規定則匯編得到的目標程序將從0000H開始。例如:
? ??????????ORG 2000H
???START:MOV? AX,#00H
匯編語言源程序中若沒有ORG偽指令,則程序執行時,指令代碼被放到自由內存空間的CS:0處;若有ORG偽指令,編譯器則把其后的指令代碼放到ORG偽指令指定的偏移地址。兩個ORG偽指令之間,除了指令代碼,若有自由空間,則用0填充。
預處理-->編譯-->匯編-->鏈接,這是高級語言的編譯全過程。對于純匯編,就只有匯編和鏈接兩個步驟。org指令是鏈接時使用的,不是匯編那一步使用的。即不是cpu的一條指令,而是給編譯器看的偽指令。在51單片機、x86 dos、win32 exe中實現都有差異。以最簡單的51單片機為例,編譯器最終鏈接生成HEX文件,再燒錄到51的rom中去。單片機很簡單,沒有x86的分段、分頁,啟動就是從rom的0x0的位置開始執行。同時0x30H位置開始存放中斷向量, 所以單片機程序一般開頭就是:? ORG 0000H? AJMP MAIN? ORG 0030H這里的ORG 0000H指令,使得程序鏈接成HEX文件時,AJMP MAIN這條指令的機器碼就在HEX文件的0x0位置。這是鏈接器的工作。至于x86 dos和win32 exe,ORG的實現就復雜了,ORG不再是絕對定位,只能在一個段里相對定位。
總結
以上是生活随笔為你收集整理的汇编 - ORG指令详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实模式和保护模式区别及寻址方式
- 下一篇: 8086/8088 存储器分段概念