亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? 宏.txt

?? 會變語言實現(xiàn)的一些程序
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
MASM宏使用總結(jié)
導(dǎo)語
MASM(Macro Assembler)是由微軟公司提供的匯編工具,雖然有些年頭了,但是仍然存在于 vc.net這樣比較新的工具中。有很多匯編教科書以這個為對象,講述了如何用匯編去設(shè)計一個程序,作為計算機(jī)科學(xué)系學(xué)生的基礎(chǔ)課。但是,講述的內(nèi)容大體上還是停留在5.1版,而且停留在DOS的時代。雖然提到了win32下的匯編,但是并沒有放在首要的位置。另一個被忽視的是作為MASM最大特色的宏,怎么去看待匯編工具中提供的強(qiáng)大的宏,以及怎么和在什么場合下使用宏,語焉不詳。本文是作者在大量使用MASM宏,搭建了一個匯編環(huán)境下的OOP系統(tǒng)后,作的一個總結(jié)。 

善用宏,能夠減少重復(fù)編碼,以及構(gòu)建強(qiáng)大的功能,是重用代碼,美化代碼的一個有力的工具。宏在高級語言中是一個應(yīng)該被極力避免的東西,在低級語言中確未必如此。 

宏就是預(yù)處理 
宏就是在代碼被匯編成為obj文件之前進(jìn)行的預(yù)處理。由于發(fā)生在匯編期(Assembly-Time, 和高級語言中的編譯期是一個意思),所以不會給執(zhí)行期帶來負(fù)擔(dān),可以用作代碼生成工具,設(shè)置和C++中的模板一樣,用作meta-programming的工具。在MASM中宏可以分為兩種:1、 Text Macro 2、Procedure (Function) Macro。第一種宏就是和#define pi 31415926這樣的簡單的文本替換的宏,第二種就是那種帶參數(shù),可以有局部變量,可以返回值這樣的可以看作函數(shù)或者過程的宏。下面就先從Text Macro入手,看看如何使用簡單的宏。 

簡單的文本宏
你可以給一個字符序列指定一個符號名,然后在源代碼的其余部分用這個名字來代替這個字符序列。這個指定了名字的文本就是文本宏。說白了就是文本替換。用TEXTEQU來定義一個這樣的宏。 

  name TEXTEQU 
  name TEXTEQU textvar
  name TEXTEQU %numvar

我這里給出的使用說明和MASM Programmer Guide中給出的不大一樣,但是這個更能說明問題。我在這兒只解釋第一個用法,后面的用法將在講了“匯編期變量”之后再講。舉一些使用的例子。

  pi TEXTEQU <3.1416>
  DWPTR TEXTEQU 
  arg1 TEXTEQU <[bp+4]>

然后在代碼中就可以用pi這些名字來代替3.1416這些。<>表示他們是字符串,如果把不加<> 則會把你給出的字符串當(dāng)作一個匯編期的文本變量來進(jìn)行求值,而這樣的話會出錯的。

匯編期的變量與常量
這個幾個東西其實都有自己的名字,其實按照用法來說就是匯編期的常量與變量的意思。比如Text Macro(對,就是前面的文本宏)用作匯編期的文本常量,Name Assignment用作匯編期的數(shù)值變量。

定義匯編期常量 

什么是匯編期常量呢?其實也就是常量的意思,因為無論在編譯期還是執(zhí)行期它都是靜態(tài)的,一旦定義之后其值不能改變。回憶在C中,你用#define來定義常量。但是#define可以改變一個宏所等于的值,也就是說常量與否需要你的維護(hù)(編譯器會給出一個警告)。在MASM 中有一個關(guān)鍵字專門用來定義常量,嘗試改變常量的值會得到一個錯誤提示。

  name EQU expression
  name EQU 

第一個是用作定義個“數(shù)值”常量,第二個是用作定義“文本”常量。以后要特別區(qū)分開文本和數(shù)值。

定義匯編期文本變量

匯編期文本變量是對“text macro”的另外一個看法。其實它們是同一個事情。當(dāng)你定義了一個文本宏之后,你可以把那個宏名看作匯編期文本變量的名字,被宏名替換的文本內(nèi)容作為變量的文本值。

那么前面說過的第二種用法:name TEXTEQU textvar就很好理解了。就是讓把一個文本變量賦給另一個文本變量。比如:

  talent TEXTEQU 
  taowen TEXTEQU talent

第一行定義了一個名字為talent的匯編期文本變量,第二行把talent的值賦給了名為 taowen的變量。從結(jié)果上看這個和:


  talent TEXTEQU 
  taowen TEXTEQU 

是一樣的,但是第二種做法是先因為文本宏替換的作用把talent變成了genius。實際的效果是這樣的:

  taowen TEXTEQU 

顯示文本變量的內(nèi)容

在C中經(jīng)常用printf,在運(yùn)行期顯示一些變量的內(nèi)容來進(jìn)行調(diào)試。而在MASM中則用echo來在匯編期顯示文本變量的內(nèi)容。

  china TEXTEQU 
  %echo china

這樣會在匯編時的命令行中出現(xiàn)great country。如果你把%號去掉,則顯示的是china。你應(yīng)該可以推測出%是干什么的了,就是對一個變量進(jìn)行求值。

定義匯編期數(shù)值變量

常量有兩種那么變量也應(yīng)該有兩種。這里就介紹匯編期數(shù)值變量的用法。

  name = expression

expression是一個數(shù)值表達(dá)式,比如:

  val = 3+4

此時val就是一個數(shù)值變量,其值為7。你也可以這么寫:

  valexp TEXTEQU <3+4>
  val = valexp

看上去好像式把一個文本變量賦給了數(shù)值變量,進(jìn)行了類型轉(zhuǎn)換(呵呵,效果是一樣的)。其實實際上是把3+4寫到了valexp處,因為文本宏進(jìn)行了文本替換。

把數(shù)值變量賦給文本變量

前面我們看到了如何“把文本變量賦給數(shù)值變量”,那么反過來呢?

  val = 3+4
  valexp TEXTEQU val

結(jié)果是提示錯誤:STest.asm(15) : error A2051: text item required。匯編器說需要文本項,那么我們加上<>就好了。

  val = 3+4
  valexp TEXTEQU 

用%echo valexp檢查一下你就會發(fā)現(xiàn),并不是如你所愿的顯示的是7,而是val。這個是因為<>使得匯編器認(rèn)為val是一個字符串,由于數(shù)值變量不是文本替換的宏,并不會把val替換為7,所以當(dāng)然顯示的是val。正確的做法是:

  val = 3+4
  valexp TEXTEQU %val

%號和前面的用法一樣,是用作求值。回憶一開始介紹的文本宏的用法中的第三條就是: name TEXTEQU %numvar。這個用法就是讓一個數(shù)值變量的值賦給文本變量,經(jīng)常用作顯示一個數(shù)值變量的值。調(diào)試的時候這么寫。

  pi = 3.1415926
  temp TEXTEQU %pi
  %echo temp

這個是一個很重要的調(diào)試技巧。

宏過程和宏函數(shù)
前面從簡單的文本宏引出匯編期的常量與變量。如果僅僅是用在宏外的代碼中,一個文本宏作一些簡單的替換就足夠了。它們更多的是用在復(fù)雜的宏中,這些宏可以看作過程和函數(shù)。同匯編期的變量一樣,它們是用在匯編期的。

下面將不再把text macro視為宏,而把它視為文本變量。宏直接指宏過程或者宏函數(shù)。宏過程是不帶返回值的宏,而宏函數(shù)是帶返回值的宏。它們都可以帶參數(shù),也都可以有局部變量。其實可以統(tǒng)一的成為宏函數(shù),或者匯編期函數(shù)

用如下的格式創(chuàng)建一個簡單的宏

  name MACRO
statements
  ENDM

statements中可以進(jìn)行判斷或者循環(huán),可以說是非常的全功能。但是匯編期的函數(shù)和執(zhí)行期的函數(shù)是很不一樣的,一個是發(fā)生在匯編期的預(yù)處理,另一個是把執(zhí)行期的執(zhí)行位置改變,執(zhí)行一段代碼之后返回。

  clear_eax_m MACRO
   xor eax, eax
  ENDM
  clear_eax_p Proc
xor eax, eax
ret
  clear_eax_p Endp

關(guān)于這個兩者的區(qū)別,我假定你已經(jīng)理解了,如果不理解可以參考任何一本匯編教科書,上面有完整的匯編代碼說明為什么不同。

給宏傳遞參數(shù)
參數(shù)對于函數(shù)的重要性不言而喻,對于宏的參數(shù)如下定義。

  name MACRO parameterlist
  statements
  ENDM

簡單情況下,對于parameterlist就是參數(shù)名字用,號格開,比如:

  clear_reg MACRO reg
xor reg, reg
  ENDM

調(diào)用的時候,用這種格式:

  clear_reg eax

對于宏過程,這個是唯一的調(diào)用格式。

參數(shù)的傳遞和執(zhí)行期的函數(shù)的參數(shù)傳遞也是很不一樣的。參數(shù)是被直接替換的。你可以作這么一個試驗:

  TestMacro MACRO param
echo param
%echo param
  ENDM
  TextVar TEXTEQU 
  TestMacro TextVar

輸出的結(jié)果是TextVar和Hello。到底是怎么回事就不用我多說了。你甚至可以進(jìn)一步測試:

  TestMacro MACRO param
param TEXTEQU 
  ENDM
  TextVar TEXTEQU 
  TestMacro TextVar
  %echo TextVar

輸出的結(jié)果是How are you。可見所謂的參數(shù)不過就是替換。參數(shù)名會被引數(shù)名給替換(引數(shù)就是調(diào)用時候傳遞過去的那些參數(shù))。由于MASM中宏這個系統(tǒng)中,所有的這些變量名的符號都是在一個共同的空間之中(呵呵,怎么聽起來像數(shù)學(xué)術(shù)語?),都是全局的東西。 

對于參數(shù)可以進(jìn)行一些限定修飾,比如讓你調(diào)用的時候一定要傳遞這個參數(shù):

  Clear_reg MACRO reg:REQ
xor reg, reg
  ENDM

或者指定一個缺省值:

  Clear_reg MACRO reg:=
xor reg, reg
  ENDM

或者讓參數(shù)個數(shù)成為一個變數(shù)。

  Clear_reg MACRO regs:VARARG

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美色爱综合网| 91精品国产91久久综合桃花 | 日本高清免费不卡视频| 欧美男生操女生| 欧美经典三级视频一区二区三区| 亚洲国产一区二区三区| 国产aⅴ精品一区二区三区色成熟| 色8久久人人97超碰香蕉987| www久久精品| 日本强好片久久久久久aaa| 91性感美女视频| 国产亚洲一区二区三区在线观看| 三级精品在线观看| 色综合婷婷久久| 欧美经典一区二区三区| 国产资源在线一区| 7777精品伊人久久久大香线蕉经典版下载| 国产精品另类一区| 国产传媒日韩欧美成人| 精品国产伦一区二区三区免费| 亚洲成人免费在线观看| 欧美日韩在线直播| 亚洲国产视频网站| 欧洲激情一区二区| 亚洲精品中文字幕在线观看| 成人avav影音| 成人欧美一区二区三区白人| 国产69精品久久99不卡| 久久色在线观看| 国产一区二区伦理| 国产日韩视频一区二区三区| 精品一区二区三区免费观看| xfplay精品久久| 成人手机电影网| 中文字幕在线观看一区二区| 成人高清视频在线| 亚洲裸体在线观看| 一本大道av一区二区在线播放| 亚洲色图在线视频| 欧美一a一片一级一片| 亚洲一卡二卡三卡四卡| 欧美日韩中文另类| 日本成人在线看| 久久综合色之久久综合| 国产成人免费在线观看不卡| 国产精品麻豆99久久久久久| 国产91对白在线观看九色| 亚洲天堂网中文字| 在线观看欧美精品| 免费人成精品欧美精品| 精品欧美一区二区在线观看| 国产激情偷乱视频一区二区三区| 国产精品嫩草影院com| 色哦色哦哦色天天综合| 日韩av不卡一区二区| 国产欧美日韩麻豆91| 91精品1区2区| 精品午夜一区二区三区在线观看| 欧美激情中文不卡| 欧美性受xxxx| 国产一区二区三区免费| 一级精品视频在线观看宜春院| 日韩欧美自拍偷拍| 成人免费视频一区| 日韩中文欧美在线| 国产日韩欧美不卡| 欧美亚洲高清一区二区三区不卡| 青青草原综合久久大伊人精品 | 欧美精品一区二区不卡| 白白色 亚洲乱淫| 五月婷婷另类国产| 国产精品国产自产拍在线| 欧美群妇大交群中文字幕| 国产高清久久久久| 亚洲高清免费在线| 亚洲国产精品v| 日韩午夜激情视频| 91久久线看在观草草青青| 精品一区二区久久| 亚洲国产欧美一区二区三区丁香婷| 欧美大片在线观看一区二区| 色综合色狠狠综合色| 粉嫩aⅴ一区二区三区四区五区 | 欧美在线小视频| 国产精品538一区二区在线| 亚洲国产精品精华液网站| 中文字幕第一区第二区| 精品欧美黑人一区二区三区| 在线观看国产91| 91在线精品一区二区三区| 狠狠色综合色综合网络| 视频一区二区三区中文字幕| 自拍偷拍亚洲综合| 欧美国产激情二区三区| 欧美va亚洲va国产综合| 在线观看91精品国产麻豆| 99国产一区二区三精品乱码| 国产成人综合亚洲网站| 久久99精品国产.久久久久久| 三级在线观看一区二区| 亚洲精品国产高清久久伦理二区| 精品动漫一区二区三区在线观看| 欧美精品第1页| 欧美精品在线观看播放| 色婷婷久久久综合中文字幕| www.欧美日韩国产在线| 成人综合婷婷国产精品久久| 国产一区二区三区四区五区美女 | 中文字幕欧美国产| 国产欧美视频一区二区| 国产欧美一区二区在线观看| 久久久影视传媒| 国产日韩视频一区二区三区| 日本一区免费视频| 日本一区二区视频在线观看| 亚洲国产精品ⅴa在线观看| 国产区在线观看成人精品| 国产婷婷一区二区| 中文字幕亚洲不卡| 一区二区视频在线看| 亚洲影院免费观看| 午夜激情一区二区三区| 日韩精品成人一区二区在线| 日本欧洲一区二区| 国产精品自产自拍| 成人av网站在线观看免费| 99久久精品久久久久久清纯| 97成人超碰视| 欧美日韩一级大片网址| 91精品国产综合久久久蜜臀图片| 日韩一级片在线观看| 久久免费偷拍视频| 国产精品大尺度| 亚洲丰满少妇videoshd| 开心九九激情九九欧美日韩精美视频电影 | 亚洲一本大道在线| 日韩影视精彩在线| 激情六月婷婷久久| 成人av在线影院| 欧美日韩国产天堂| 久久精品综合网| 亚洲精品v日韩精品| 免费高清在线视频一区·| 国产毛片精品国产一区二区三区| 99久久久久久| 日韩亚洲欧美在线观看| 中文字幕不卡三区| 日韩精彩视频在线观看| 国产乱码精品一区二区三区av | 奇米色一区二区三区四区| 国产精品888| 欧美日产在线观看| 欧美高清在线精品一区| 亚洲福利视频三区| 成人激情免费网站| 欧美一区二区视频观看视频| 国产日韩综合av| 免费在线观看日韩欧美| 丰满亚洲少妇av| 日韩三级.com| 一区二区三区丝袜| 国产激情一区二区三区四区 | 欧洲激情一区二区| 久久久精品蜜桃| 日韩不卡在线观看日韩不卡视频| 成人国产精品免费网站| 日韩欧美www| 亚洲午夜精品在线| 国v精品久久久网| 欧美videofree性高清杂交| 一区二区三区蜜桃网| 国产精品18久久久久久久久久久久| 欧洲av在线精品| 国产精品国产成人国产三级| 国产在线精品免费| 4438x成人网最大色成网站| 亚洲美女屁股眼交3| 懂色av噜噜一区二区三区av| 88在线观看91蜜桃国自产| 亚洲免费观看在线视频| 国产乱对白刺激视频不卡| 日韩一区二区不卡| 亚洲第一电影网| 色综合激情久久| 亚洲精品久久久蜜桃| 国产成人免费视频网站| 精品久久五月天| 婷婷成人综合网| 欧美日韩dvd在线观看| 一区二区三区在线不卡| 91玉足脚交白嫩脚丫在线播放| 国产无人区一区二区三区| 国产麻豆91精品| 久久蜜桃一区二区| 国产毛片精品国产一区二区三区| 精品国产乱码久久| 韩国av一区二区| 精品国产第一区二区三区观看体验| 免费在线观看成人| 欧美tk—视频vk|