匯編基本知識(shí)_第1頁(yè)
匯編基本知識(shí)_第2頁(yè)
匯編基本知識(shí)_第3頁(yè)
匯編基本知識(shí)_第4頁(yè)
匯編基本知識(shí)_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、為什么assume了DS以后,在代碼里面還要再次mov ax,data;mov ds,ax呢?這里的 assume 語(yǔ)句是告訴編譯器各個(gè)段是由哪個(gè)段寄存器指向的,這樣編譯器就可以根據(jù)所設(shè)定的條件在需要時(shí)加上段前綴指令;它并不生成對(duì)段寄存器進(jìn)行設(shè)置的指令,這個(gè)是需要程序自己來(lái)做的。所以,就有了 assume 語(yǔ)句之后,代碼里自己設(shè)置相應(yīng)的段寄存器。嗯 樓上說(shuō)的對(duì)。匯編語(yǔ)言有三類(lèi)指令:(1)匯編指令,如mov ax,0等,有對(duì)應(yīng)的機(jī)器碼;(2)偽指令,如assume,db等,由編譯器執(zhí)行,計(jì)算機(jī)并不執(zhí)行,沒(méi)有對(duì)應(yīng)機(jī)器碼;(3)其他符號(hào),如+、-等,由編譯器識(shí)別,沒(méi)有對(duì)應(yīng)機(jī)器碼。所以,assume只

2、是給編譯器一個(gè)信息,告訴編譯器相關(guān)段寄存器和段的聯(lián)系。但是,計(jì)算機(jī)并不執(zhí)行它,要想真正將段地址存放到相關(guān)段寄存器中,需要用匯編指令來(lái)完成。匯編語(yǔ)言中data segment什么意思下面是匯編的基本框架:定義數(shù)據(jù)段 就是數(shù)據(jù)存放的地方DATA SEGMENT.DATA ENDS定義代碼段 當(dāng)然就是要執(zhí)行的程序代碼了CODE SEGMENTSTART:.CODE ENDSEND START匯編偽指令assume cs:code,ds:data,ss:stack的含義王爽的匯編教程中,下面一段匯編源文件,大意是把0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0c

3、bah, 0987h這8個(gè)數(shù),通過(guò)入棧出棧的方法逆序排列回原來(lái)的內(nèi)存位置。assume cs:code, ds:data, ss:stackdata segmentdw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987hdata endsstack segmentdw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0stack endscode segmentstart: mov ax,stackmov ss,axmov sp,20hmov ax,datamov ds,axmov bx,0mov cx,8s: push b

4、xadd bx,2loop smov bx,0mov cx,8s0: pop bxadd bx,2loop s0mov ax,4coohint 21hcode endsend start那么問(wèn)題來(lái)了。問(wèn)題:開(kāi)頭的偽指令assume cs:code,ds:data,ss:stack作用既然不是把cs、ds、ss三個(gè)指針指向三個(gè)段,那寫(xiě)它有什么用?問(wèn)題:ds,ss指針都通過(guò)mov ax,data mov ds,ax和mov ax,stack mov ss,ax被手動(dòng)指向的正確的代碼段。唯獨(dú)cs指針沒(méi)有標(biāo)明指向,程序是如何把cs指針指向正確的代碼段的。最佳答案問(wèn)題:你的程序中,可以用十個(gè)八個(gè)段,比如

5、段名 D1,D2,D3,D4,D5,D6,8086/8088 CPU的設(shè)計(jì),是任一時(shí)刻,只能通過(guò)4個(gè)段寄存器最多同時(shí)訪問(wèn)4個(gè)段。那么問(wèn)題來(lái)了:某個(gè)段(比如D5段)與哪個(gè)段寄存器關(guān)聯(lián)、用哪個(gè)段寄存器訪問(wèn)呢?assume偽指令就是用來(lái)解決這個(gè)問(wèn)題的。你 assume ES:D5 以后,就將程序中的D5段與ES段寄存器綁定了,匯編程序能知道,訪問(wèn)D5段中的變量,要用ES作為段寄存器。問(wèn)題:DOS操作系統(tǒng)的程序裝入功能,是這樣設(shè)計(jì)的:裝入exe文件時(shí),根據(jù)exe文件頭中的信息,將CS:IP指向裝入后內(nèi)存中程序的入口(第一條執(zhí)行指令),也就是說(shuō),要在裝入程序時(shí)設(shè)置CS, IP兩個(gè)寄存器。對(duì)于其它3個(gè)段寄

6、存器,DOS裝入功能的處理,是將它們指向DOS操作系統(tǒng)為管理程序內(nèi)存而創(chuàng)建的程序段前綴PSP的段地址。那么問(wèn)題來(lái)了:程序運(yùn)行后,要訪問(wèn)程序中的某個(gè)段里的數(shù)據(jù),怎么辦呢?答案當(dāng)然就是需要你自己在程序中加入將段地址傳送到段寄存器的指令啦。最后提一下,assume是給匯編程序在匯編翻譯源程序時(shí)用的,段寄存器(CS除外)要自己設(shè)置初值是DOS操作系統(tǒng)的功能要求你程序這么做的。追問(wèn)assume ES:D5 以后,就將程序中的D5段與ES段寄存器綁定了這個(gè)“綁定”的意思是:如果用其他段寄存器比如DS:bx訪問(wèn)D5段,程序就會(huì)報(bào)錯(cuò)嗎?追答舉個(gè)例子吧:假設(shè),在D5段中有一個(gè)變量x02,你程序中某處有一條指令

7、mov ax, x02若沒(méi)有assume,匯編這條mov指令時(shí),匯編程序會(huì)報(bào)錯(cuò)。因?yàn)椴恢烙媚膫€(gè)段寄存器。有assume,匯編結(jié)果是 mov ax, es:(x02的偏移地址),因?yàn)槟鉧ssume告訴了匯編程序這個(gè)段用的是es這個(gè)段寄存器MOV AX,DATAS MOV DS,AX 這兩句是什么意思?mov ax, datas ;將偽段地址放入ax中,datas不是指令,而是偽指令,實(shí)際上是一個(gè)動(dòng)態(tài)的內(nèi)存地址,要想運(yùn)行,必須先其地相放入到ds中,但是內(nèi)存數(shù)不能放入段地址。所以mov ds,ax ;就是將段地址裝入段寄存器,最終達(dá)到了段地址裝入段寄存器的目的!在80X86中規(guī)定,內(nèi)存數(shù)不可以直接

8、裝入段寄存器,所以才會(huì)有這樣的一次中轉(zhuǎn)!datas不是指令字,而是偽指令,實(shí)際上你可以理解他為一個(gè)標(biāo)簽,將這個(gè)標(biāo)簽裝入AX中,實(shí)際裝入的就是數(shù)據(jù)段的首地址!指令與偽指令的區(qū)別在在于,指令是屬性指令集(屬于CPU的),而偽指令則是屬于編譯軟件的,掃描后由編譯軟件進(jìn)行的操作。DOS系統(tǒng)功能調(diào)用表(INT 21H) AH功能調(diào)用參數(shù)返回參數(shù)00程序終止(同INT 20H)CS=程序段前綴01鍵盤(pán)輸入并回顯AL=輸入字符02顯示輸出DL=輸出字符03異步通迅輸入AL=輸入數(shù)據(jù)04異步通迅輸出DL=輸出數(shù)據(jù)05打印機(jī)輸出DL=輸出字符06直接控制臺(tái)I/ODL=FF(輸入)DL=字符(輸出)AL=輸入字符

9、07鍵盤(pán)輸入(無(wú)回顯)AL=輸入字符08鍵盤(pán)輸入(無(wú)回顯)檢測(cè)Ctrl-BreakAL=輸入字符09顯示字符串DS:DX=串地址$結(jié)束字符串0A鍵盤(pán)輸入到緩沖區(qū)DS:DX=緩沖區(qū)首地址(DS:DX)=緩沖區(qū)最大字符數(shù)(DS:DX+1)=實(shí)際輸入的字符數(shù)0B檢驗(yàn)鍵盤(pán)狀態(tài)AL=00有輸入AL=FF無(wú)輸入0C清除輸入緩沖區(qū)并請(qǐng)求指定的輸入功能AL=輸入功能號(hào)(1,6,7,8,A)0D磁盤(pán)復(fù)位清除文件緩沖區(qū)0E指定當(dāng)前缺省的磁盤(pán)驅(qū)動(dòng)器DL=驅(qū)動(dòng)器號(hào)0=A,1=B,.AL=驅(qū)動(dòng)器數(shù)0F打開(kāi)文件DS:DX=FCB首地址AL=00文件找到AL=FF文件未找到10關(guān)閉文件DS:DX=FCB首地址AL=00目錄

10、修改成功AL=FF目錄中未找到文件11查找第一個(gè)目錄項(xiàng)DS:DX=FCB首地址AL=00找到AL=FF未找到12查找下一個(gè)目錄項(xiàng)DS:DX=FCB首地址(文件中帶有*或?)AL=00找到AL=FF未找到13刪除文件DS:DX=FCB首地址AL=00刪除成功AL=FF未找到14順序讀DS:DX=FCB首地址AL=00讀成功 =01文件結(jié)束,記錄中無(wú)數(shù)據(jù) =02 DTA空間不夠 =03文件結(jié)束,記錄不完整15順序?qū)慏S:DX=FCB首地址AL=00寫(xiě)成功 =01盤(pán)滿(mǎn) =02 DTA空間不夠16建文件DS:DX=FCB首地址AL=00建立成功 =FF無(wú)磁盤(pán)空間17文件改名DS:DX=FCB首地址(D

11、S:DX+1)=舊文件名(DS:DX+17)=新文件名AL=00成功AL=FF未成功19取當(dāng)前缺省磁盤(pán)驅(qū)動(dòng)器AL=缺省的驅(qū)動(dòng)器號(hào)0=A,1=B,2=C,.1A置DTA地址DS:DX=DTA地址1B取缺省驅(qū)動(dòng)器FAT信息AL=每簇的扇區(qū)數(shù)DS:BX=FAT標(biāo)識(shí)字節(jié)CX=物理扇區(qū)大小DX=缺省驅(qū)動(dòng)器的簇?cái)?shù)1C取任一驅(qū)動(dòng)器FAT信息DL=驅(qū)動(dòng)器號(hào)同上21隨機(jī)讀DS:DX=FCB首地址AL=00讀成功 =01文件結(jié)束 =02緩沖區(qū)溢出 =03緩沖區(qū)不滿(mǎn)22隨機(jī)寫(xiě)DS:DX=FCB首地址AL=00寫(xiě)成功 =01盤(pán)滿(mǎn) =02緩沖區(qū)溢出23測(cè)定文件大小DS:DX=FCB首地址AL=00成功(文件長(zhǎng)度填入FC

12、B)AL=FF未找到24設(shè)置隨機(jī)記錄號(hào)DS:DX=FCB首地址25設(shè)置中斷向量DS:DX=中斷向量AL=中斷類(lèi)型號(hào)26建立程序段前綴DX=新的程序段前綴27隨機(jī)分塊讀DS:DX=FCB首地址CX=記錄數(shù)AL=00讀成功 =01文件結(jié)束 =02緩沖區(qū)太小,傳輸結(jié)束 =03緩沖區(qū)不滿(mǎn)28隨機(jī)分塊寫(xiě)DS:DX=FCB首地址CX=記錄數(shù)AL=00寫(xiě)成功 =01盤(pán)滿(mǎn) =02緩沖區(qū)溢出29分析文件名ES:DI=FCB首地址DS:SI=ASCIIZ串AL=控制分析標(biāo)志AL=00標(biāo)準(zhǔn)文件 =01多義文件 =02非法盤(pán)符2A取日期CX=年DH:DL=月:日(二進(jìn)制)2B設(shè)置日期CX:DH:DL=年:月:日AL=

13、00成功 =FF無(wú)效2C取時(shí)間CH:CL=時(shí):分DH:DL=秒:1/100秒2D設(shè)置時(shí)間CH:CL=時(shí):分DH:DL=秒:1/100秒AL=00成功 =FF無(wú)效2E置磁盤(pán)自動(dòng)讀寫(xiě)標(biāo)志AL=00關(guān)閉標(biāo)志AL=01打開(kāi)標(biāo)志2F取磁盤(pán)緩沖區(qū)的首址ES:BX=緩沖區(qū)首址30取DOS版本號(hào)AH=發(fā)行號(hào),AL=版本31結(jié)束并駐留AL=返回碼DX=駐留區(qū)大小33Ctrl-Break檢測(cè)AL=00取狀態(tài) =01置狀態(tài)(DL)DL=00關(guān)閉檢測(cè) =01打開(kāi)檢測(cè)DL=00關(guān)閉Ctrl-Break檢測(cè) =01打開(kāi)Ctrl-Break檢測(cè)35取中斷向量AL=中斷類(lèi)型ES:BX=中斷向量36取空閑磁盤(pán)空間DL=驅(qū)動(dòng)器號(hào)

14、0=缺省,1=A,2=B,.成功:AX=每簇扇區(qū)數(shù) BX=有效簇?cái)?shù) CX=每扇區(qū)字節(jié)數(shù) DX=總簇?cái)?shù)失敗:AX=FFFF38置/取國(guó)家信息DS:DX=信息區(qū)首地址BX=國(guó)家碼(國(guó)際電話(huà)前綴碼)AX=錯(cuò)誤碼39建立子目錄(MKDIR)DS:DX=ASCIIZ串地址AX=錯(cuò)誤碼3A刪除子目錄(RMDIR)DS:DX=ASCIIZ串地址AX=錯(cuò)誤碼3B改變當(dāng)前目錄(CHDIR)DS:DX=ASCIIZ串地址AX=錯(cuò)誤碼3C建立文件DS:DX=ASCIIZ串地址CX=文件屬性成功:AX=文件代號(hào)錯(cuò)誤:AX=錯(cuò)誤碼3D打開(kāi)文件DS:DX=ASCIIZ串地址AL=0讀 =1寫(xiě) =3讀/寫(xiě)成功:AX=文件代

15、號(hào)錯(cuò)誤:AX=錯(cuò)誤碼3E關(guān)閉文件BX=文件代號(hào)失敗:AX=錯(cuò)誤碼3F讀文件或設(shè)備DS:DX=數(shù)據(jù)緩沖區(qū)地址BX=文件代號(hào)CX=讀取的字節(jié)數(shù)讀成功: AX=實(shí)際讀入的字節(jié)數(shù) AX=0已到文件尾讀出錯(cuò):AX=錯(cuò)誤碼40寫(xiě)文件或設(shè)備DS:DX=數(shù)據(jù)緩沖區(qū)地址BX=文件代號(hào)CX=寫(xiě)入的字節(jié)數(shù)寫(xiě)成功: AX=實(shí)際寫(xiě)入的字節(jié)數(shù)寫(xiě)出錯(cuò):AX=錯(cuò)誤碼41刪除文件DS:DX=ASCIIZ串地址成功:AX=00出錯(cuò):AX=錯(cuò)誤碼(2,5)42移動(dòng)文件指針BX=文件代號(hào)CX:DX=位移量AL=移動(dòng)方式(0:從文件頭絕對(duì)位移,1:從當(dāng)前位置相對(duì)移動(dòng),2:從文件尾絕對(duì)位移)成功:DX:AX=新文件指針位置出錯(cuò):AX=錯(cuò)

16、誤碼43置/取文件屬性DS:DX=ASCIIZ串地址AL=0取文件屬性AL=1置文件屬性CX=文件屬性成功:CX=文件屬性失敗:CX=錯(cuò)誤碼44設(shè)備文件I/O控制BX=文件代號(hào)AL=0取狀態(tài) =1置狀態(tài)DX =2讀數(shù)據(jù) =3寫(xiě)數(shù)據(jù) =6取輸入狀態(tài) =7取輸出狀態(tài)DX=設(shè)備信息45復(fù)制文件代號(hào)BX=文件代號(hào)1成功:AX=文件代號(hào)2失敗:AX=錯(cuò)誤碼46人工復(fù)制文件代號(hào)BX=文件代號(hào)1CX=文件代號(hào)2失敗:AX=錯(cuò)誤碼47取當(dāng)前目錄路徑名DL=驅(qū)動(dòng)器號(hào)DS:SI=ASCIIZ串地址(DS:SI)=ASCIIZ串失敗:AX=出錯(cuò)碼48分配內(nèi)存空間BX=申請(qǐng)內(nèi)存容量成功:AX=分配內(nèi)存首地失敗:BX=

17、最大可用內(nèi)存49釋放內(nèi)容空間ES=內(nèi)存起始段地址失敗:AX=錯(cuò)誤碼4A調(diào)整已分配的存儲(chǔ)塊ES=原內(nèi)存起始地址BX=再申請(qǐng)的容量失敗:BX=最大可用空間 AX=錯(cuò)誤碼4B裝配/執(zhí)行程序DS:DX=ASCIIZ串地址ES:BX=參數(shù)區(qū)首地址AL=0裝入執(zhí)行AL=3裝入不執(zhí)行失敗:AX=錯(cuò)誤碼4C帶返回碼結(jié)束AL=返回碼4D取返回代碼AX=返回代碼4E查找第一個(gè)匹配文件DS:DX=ASCIIZ串地址CX=屬性AX=出錯(cuò)代碼(02,18)4F查找下一個(gè)匹配文件DS:DX=ASCIIZ串地址(文件名中帶有?或*)AX=出錯(cuò)代碼(18)54取盤(pán)自動(dòng)讀寫(xiě)標(biāo)志AL=當(dāng)前標(biāo)志值56文件改名DS:DX=ASCII

18、Z串(舊)ES:DI=ASCIIZ串(新)AX=出錯(cuò)碼(03,05,17)57置/取文件日期和時(shí)間BX=文件代號(hào)AL=0讀取AL=1設(shè)置(DX:CX)DX:CX=日期和時(shí)間失敗:AX=錯(cuò)誤碼58取/置分配策略碼AL=0取碼AL=1置碼(BX)成功:AX=策略碼失敗:AX=錯(cuò)誤碼59取擴(kuò)充錯(cuò)誤碼AX=擴(kuò)充錯(cuò)誤碼BH=錯(cuò)誤類(lèi)型BL=建議的操作CH=錯(cuò)誤場(chǎng)所5A建立臨時(shí)文件CX=文件屬性DS:DX=ASCIIZ串地址成功:AX=文件代號(hào)失敗:AX=錯(cuò)誤碼5B建立新文件CX=文件屬性DS:DX=ASCIIZ串地址成功:AX=文件代號(hào)失敗:AX=錯(cuò)誤碼5C控制文件存取AL=00封鎖 =01開(kāi)啟BX=文件代號(hào)CX:DX=文件位移SI:DI=文件長(zhǎng)度失敗:AX=錯(cuò)誤碼62取程序段前綴BX=PSP地址匯編中INT 21H是什么意思?INT 軟件中斷, 21H是函數(shù)入口地址,實(shí)際上就是調(diào)用DOS的系統(tǒng)功能。是DOS的中斷調(diào)用比如MOV AH 4CHINT 21H是返回DOS系統(tǒng)的通過(guò)給AH寄存器賦值4CH,然后調(diào)用INT 21H指令,計(jì)算機(jī)就會(huì)根據(jù)AH寄存器中的值執(zhí)行相應(yīng)的操作,其中4CH是返回D

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論