freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

masm手冊(參考版)

2025-07-02 07:24本頁面
  

【正文】 命令來取消。 單行的宏可以使用39。(另外,還可以減少打 字錯誤)。 ..and so on endstruc 現(xiàn)在,我們需要存取tBIOSDA中的元素,我們可以這樣: mov ax,BDASTART + mov bx,BDASTART + 如果在很多地方都要用到,這會變得非常的繁瑣無趣,但使用下面 的宏會大大減小打字的量: 。 Start of BIOS data area struc tBIOSDA 。這在很多處理相似的事情的相似的宏中非常有用。 : 連接單行宏的符號: `%+39。isFalse39。isTrue39。isFalse39。%xdefine39。isTrue39。isFalse39。isFalse39。 是0,而第二次是1。第一次宏被調(diào)用時,39。isTrue39。isTrue39。isFalse39。定義時,它只在被調(diào)用時進行展開。這是因為,當(dāng)一個單行宏用 39。val239。val139。%xidefine39。%xdefine39。不能提供的另外一種機制。 與在調(diào)用宏時展開宏不同,如果想要調(diào)用一個嵌入有其他宏的宏時,使用 它在被定義的值,你需要39。選項來預(yù)定義宏。定義宏時非常有用() 你可以在命令行中使用39。這在用 39。foo39。的定義都不會被接受了:一個不帶參數(shù)的宏定義不允許 對它進行帶有參數(shù)進行重定義。盡管如此,但如果 你定義了: %define foo bar 那么其他的對39。會變成39。而39。會變成39。 你甚至可以重載單行宏:如果你這樣寫: %define foo(x) 1+x %define foo(x,y) 1+x*y 預(yù)處理器能夠處理這兩種宏調(diào)用,它是通過你傳遞的參數(shù)的個數(shù)來進行區(qū)分的, 所以39。不會再被進一步擴展。會被擴展成39。 當(dāng)一個嵌套定義(一個宏定義中含有它本身)的宏被展開時,有一個機制可以 檢測到,并保證不會進入一個無限循環(huán)。等都會被擴展成39。,39。,39。會導(dǎo)致39。所以 39。insensitive39。%define39。%idefine39。都不會?;蛘?9。:39。會被擴展成39。之后,只有 39。定義的宏是大小寫敏感的:在代碼39。 用39。b39。mov ax, 1+2*839。D39。 會被擴展為: mov byte [(2)+(2)*(ebx)], 0x1F amp。 %define param(a,b) ((a)+(a)*(b)) mov byte [param(2,ebx)], ctrl 39。定義的。 單行的宏是以預(yù)處理指令39。 單行的宏。打頭。機制 預(yù)處理指令都是以一個39。輸出文件的執(zhí)行入口。被用來指定39。 this will jump three lines up NASM還能定義其他的特殊符號,比如以兩個句點開始的符號,比如 39。 another nonlocal label .local: 。 this is really ..foo: 。開始,它不會對本地label產(chǎn)生干擾,所以,你可以寫: label1: 。所以NASM引進了第三類label,它只在宏定義中有用:如果一個label 以一個前綴39。 and some more jmp 有時,這是很有用的(比如在使用宏的時候),可以定義一個label,它可以 在任何地方被引用,但它不會對常規(guī)的本地label機制產(chǎn)生干擾。所以你確實需要 的話你可寫: label3 。而第二個符號被記作39。這 是通過在本地label的前面加上非本地label前綴實現(xiàn)的: 定義為39。 的兩個定義通過與它們前面的非本地Label相關(guān)聯(lián)而被分離開來了。指令跳至離它較近的前面的一行上,因為39。 some more code jne .loop ret 上面的代碼片斷中,每一個39。 some more code jne .loop ret label2 。在第二遍的時候,這個決定已經(jīng) 作出了,它保持使這條指令很長,所以,這種情況下產(chǎn)生的代碼沒有足夠的小, 這個問題可以通過先定義offset的辦法得到解決,或者強制有效地址的尺寸大 小,象這樣寫代碼: [byte ebx+offset] 本地Labels NASM對于那些以一個句點開始的符號會作特殊處理,一個以單個句點開始的 Label會被處理成本地label, 這意味著它會跟前面一個非本地label相關(guān)聯(lián). 比如: label1 。的情況是:它 可能是代碼段中的一個符號,而且,它可能需要四字節(jié)的形式。足夠小,足以 放在一個字節(jié)的偏移域中,所以,它以產(chǎn)生一個短形式的有效地址編碼的方 式來解決這個問題;在第一遍中,它所知道的所有關(guān)于39。它沒有辦法知道39。mov eax,[ebx+offset]39。offset39。的定義在第一遍的時候就會被拒絕。右側(cè)的表達式也定義為臨界表達式,所以, 39。 NASM為了避免此類問題,把39。EQU39。 的值。,它不能為它產(chǎn)生正確的代碼,因為它還沒有知道39。所以在第二遍的時候,當(dāng)它遇 上39。symbols239。symbol139。symbol139。類的偽指令的參數(shù)也是臨界表達式。前綴的參數(shù)就是一個 臨界表達式;同樣的原因,39。 NASM使用一個叫做臨界表達式的概念,以禁止上述的這些例子,臨界表達式 被定義為一個表達式,它所需要的值在第一遍匯編時都是可計算的,所以, 該表達式所依賴的符號都是之前已經(jīng)定義了的,39。NOW where am I?39。它會拒絕這樣的代碼。TIMES39。Where am I?39。所以,有一件事 NASM不能處理,那就是一段代碼的尺寸依賴于另一個符號值,而這個符號又 在這段代碼的后面被聲明。所以它就不能處理那些非常復(fù)雜的需要三遍甚至更多遍匯編 的源代碼。 臨界表達式。STRICT39。,而 push strict dword 33 會被編碼成六個字節(jié),帶有一個完整的雙字立即數(shù)`66 68 21 00 00 0039。BITS 1639。用來制約這種優(yōu)化,強制一個特定的操作 數(shù)為一個特定的尺寸。關(guān)鍵字39。TWORD39。QWORD39。DWORD39。WORD39。BYTE39。 當(dāng)在匯編時把優(yōu)化器打開到2或更高級的時候()。 `STRICT39。在這里完全相同。 的工作方式跟39。39。call far procedure39。都以立即數(shù)的形式出現(xiàn)。和39。NASM提供fall call(段內(nèi))和jump,這里 39。 通過使用39。symbol39。ES:BX39。關(guān)鍵字,你可以這樣寫: mov ax,weird_seg 。 而事情往往可能比這還要復(fù)雜些:因為16位的段與組是可以相互重疊的, 你通??赡苄枰ㄟ^不同的段基址,而不是首選的段基址來引用一個符 號,NASM可以讓你這樣做,通過使用39。symbol39。ES:BX39。SEG39。操作符來實現(xiàn)這個功能。 當(dāng)寫很大的16位程序時,必須把它分成很多段,這時,引用段內(nèi)一個符號的 地址的能力是非常有必要的,NASM提供了39。 `SEG39。SEG39。~39。39。+39。39。 這些只作用于一個參數(shù)的一元運算符是NASM的表達式語法中優(yōu)先級最高的。, `~39。 一元運算符: `+39。%39。 同ANSI C一樣,NASM不保證對帶符號模操作執(zhí)行的操作的有效性。%%39。%39。是帶 符號除。是無符號除,39。都是除法運算符,39。和39。39。*39。: 乘除法運算符。, `%39。, `/39。運算符提供完整的普通加減法功能。與39。 39。 and `39。在NASM中,這樣的位移總是無符號的,所以位移后,左側(cè)總是以 零填充,并不會有符號擴展。39。相當(dāng)于把5乘上8。 提供位左移, 跟C中的實現(xiàn)一樣,所以39。: 位移運算符。 `39。39。: 位與運算符。 `amp。 `^39。 `^39。是完全相 同的。給出一個位級的或運算,所執(zhí)行的操作與機器指令39。 運算符39。 NASM提供的運算符以運算優(yōu)先級為序列舉如下: `|39。$$39。來表示無限循環(huán)。計算得到它本身所在源代碼行的開始處的地址;所以你可以簡 單地寫這樣的代碼39。39。$$39。$39。NASM唯一能 夠保證的是:你至少擁有32位長度。 NASM不能確定編譯時在計算表達式時的整型數(shù)尺寸:因為NASM可以在64位系 統(tǒng)上非常好的編譯和運行,不要假設(shè)表達式總是在32位的寄存器中被計算的, 所以要慎重地對待整型數(shù)溢出的情況。所以,NASM為了能夠處理浮點運算,它必須含有它自己的一套完整 的浮點處理例程,它大大增加了匯編器的大小,卻獲得了并不多的好處。這是因為NASM被設(shè)計為可移植的,盡管它 常產(chǎn)生x86處理器上的代碼,匯編器本身卻可以和ANSI C編譯器一起運行在任 何系統(tǒng)上。 000 000 1 dt 。 10,000,000,000 dq +10 。 一些例子: dd 。dd 39。dd 139。跟上 一個指數(shù)。它們以傳統(tǒng)的形式表 達:數(shù)值,然后一個句點,然后是可選的更多的數(shù)值,然后是選項39。DT39。DQ39。DD39。的操作數(shù)時被處理成字符串。同樣的,三字符或四字符常數(shù)會 在作為39。39。db 39。ab39。的常數(shù)會被處理成字符串常量,因 為它作為字符常數(shù)的話,還不夠短,因為,如果不這樣,那39。的操作數(shù),類似39。 and really looks like this 注意,如果作為39。ninechars39。 。,39。,39。 doubleword string constant dd 39。ninechars39。 。,39。,39。,39。,39。 string constant db 39。hello39。它被處理成最大長 度的字符常數(shù)之間的連接。INCBIN39。DB39。指令理解的字符常 數(shù)形式() 字符串常數(shù)。這也是奔騰的39。而不是39。所以你把常數(shù)存入內(nèi)存 的話,它會讀成39。 產(chǎn)生的常數(shù)不會是`0x6162636439。 一個具有多個字符的字符常數(shù)會被littleendian order,如果你編寫: mov eax,39。 一個字符常數(shù)最多由包含在雙引號或單引號中的四個字符組成。 octal mov ax,10010011b 。 hex again: the 0 is required mov ax,0xa2 。 decimal mov ax,0a2h 。后緊跟數(shù)字,而 不是字符。作前綴的十六進制數(shù)值必須在39。前綴在標(biāo)識符中具有雙重職責(zé) (),所以一個以39。來表示十六進制數(shù),注意,39。表示十六進制數(shù),或者以Borland Pascal風(fēng) 格的前綴39。來指定十六進制數(shù),八進制數(shù)和二進制數(shù), 或者你可以用C風(fēng)格的前綴39。,39。,39。NASM允許你以多種方式指定數(shù)值使用的 進制,你可以以后綴39。 數(shù)值常數(shù)。按字面意思被處理。關(guān)鍵字改變這種行為:`[nosplit eax*2]39。[eax+eax+offset]39。[eax*2+offset]39。[eax+eax]39。[eax*2]39。實際上,如果你要存取一個在已知偏 移地址處的數(shù)據(jù),而這個地址又大于16位值,如果你不指定一個dword偏移, NASM會讓高位上的偏移值丟失。 當(dāng)你希望在16位的代碼中存取32位段中的數(shù)據(jù)時,上面所描述的形式是非常有用 的。[eax]39。會帶一個doubleword的0偏移。而39。[eax+0]39。有一種特殊情 況,‘[byte eax]39。比如:39。[dword eax+3]39。被匯編成具有一個doubleword的 偏移域,而不是由NASM缺省產(chǎn)生一個字節(jié)的偏移。如果你想讓39。NOSPLIT39。DWORD39。WORD39。BYTE39。具有不同的缺省段寄存器。和39。產(chǎn)生不同的操作碼; 通常,這是很有用的,因為39。和39。 NASM具有一種隱含的機制,它會對39。[eax+eax]39。[eax*2+0]39。 ie [label1+(label1label2)] 有些形式的有效地址在匯編后具有多種形式;在大多數(shù)情況下,NASM會自動產(chǎn)生 最小化的形式。 更復(fù)雜一些的有效地址,比
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1