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

正文內(nèi)容

masm手冊(cè)(參考版)

2025-07-02 07:24本頁(yè)面
  

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