匯編語(yǔ)言實(shí)驗(yàn)指導(dǎo)書2016_第1頁(yè)
匯編語(yǔ)言實(shí)驗(yàn)指導(dǎo)書2016_第2頁(yè)
匯編語(yǔ)言實(shí)驗(yàn)指導(dǎo)書2016_第3頁(yè)
匯編語(yǔ)言實(shí)驗(yàn)指導(dǎo)書2016_第4頁(yè)
匯編語(yǔ)言實(shí)驗(yàn)指導(dǎo)書2016_第5頁(yè)
已閱讀5頁(yè),還剩55頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

匯編語(yǔ)言實(shí)驗(yàn)指導(dǎo)書實(shí)驗(yàn)環(huán)境:1.硬件:PC微機(jī)2.軟件:DOS系統(tǒng)、EDIT.EXE、MASM.EXE、LINK.EXE、DEBUG.EXE注:DOS系統(tǒng)(WINDOWS下的虛擬8086方式)上機(jī)注意事項(xiàng)●進(jìn)入”命令提示符(DOS空間)”有多種方法:1.通過附件進(jìn)入:命令提示符↓2.“開始”→“運(yùn)行”→敲入命令“cmd”;3.鍵盤wir+r→敲入命令“cmd”●dos命令窗口大小調(diào)整辦法:在DOS窗口標(biāo)題欄上點(diǎn)擊右鍵,選擇“屬性”,在“布局”標(biāo)簽頁(yè)中修改“窗口大小”設(shè)置?!癯S肈OS命令:回根目錄命令:cd..↓cd\↓(一次退到根)轉(zhuǎn)到D盤命令:D:↓看D盤目錄命令:D:\>dir↓進(jìn)入文件夾命令:cdxxx↓●用編輯軟件輸入完整的匯編語(yǔ)言源文件,在Windows系統(tǒng)下用記事本即可;在DOS系統(tǒng)下用EDIT軟件編輯。要求編輯完成的文件擴(kuò)展名一定是.asm實(shí)驗(yàn)一DEBUG命令實(shí)驗(yàn)一.實(shí)驗(yàn)?zāi)康模菏煜EBUG程序和命令,并用它運(yùn)行基本指令和察看運(yùn)行結(jié)果。eq\o\ac(○,1)怎樣調(diào)用Debug②如何顯示和修改內(nèi)存單元③如何顯示和修改CPU的寄存器④各標(biāo)志位的狀態(tài)是如何表示的,怎樣修改標(biāo)志寄存器⑤怎樣匯編與反匯編⑥怎樣執(zhí)行程序⑦怎樣跟蹤程序⑧怎樣退出Debug二.實(shí)驗(yàn)內(nèi)容:DEBUG是專門為匯編語(yǔ)言設(shè)計(jì)的一種調(diào)試工具,它通過步進(jìn),設(shè)置斷點(diǎn)等方式為匯編語(yǔ)言程序員提供了非常有效的調(diào)試手段。1、DEBUG程序的啟動(dòng)DEBUG的命令格式:[drive:][path]DEBUG[d:][p][filename][.ext][param...]其中:drive:

是指定DEBUG文件的磁盤驅(qū)動(dòng)器標(biāo)識(shí)符,DEBUG是外部DOS命令,所以必須把它從磁盤讀入內(nèi)存。若未指定,DOS將使用當(dāng)前默認(rèn)磁盤驅(qū)動(dòng)器。path:

是DOS查找DEBUG文件的一個(gè)子目錄串表示的路徑。若未指定,DOS將使用當(dāng)前工作目錄。d:

是DEBUG將要調(diào)試的文件所在的磁盤驅(qū)動(dòng)器。p:

是查找DEBUG將要調(diào)試的文件所需的子目錄路徑,若未指定,DOS使用當(dāng)前目錄。filename[.ext]是DEBUG將要調(diào)試的文件名。param

是將被調(diào)試的程序(或文件)的命令行參數(shù)。例如:debug.exe就在C盤根目錄下,在DOS提示符下,可鍵入命令:C:\>debug進(jìn)入DEBUG控制狀態(tài),顯示提示符'-'DEBUG所完成的初始化動(dòng)作:段寄存器CS、DS、ES和SS置為DEBUG程序后的第一個(gè)段。指令指針寄存器IP置為100H(程序段前綴PSP后的第一個(gè)語(yǔ)句)。(256字節(jié)為PSP數(shù)據(jù)區(qū),DOS利用SPS與被加載程序進(jìn)行通信)堆棧指針SP置為段末或COMMAND.COM暫駐部分的結(jié)束地址(其中較小的那個(gè)地址)。其余通用寄存器均置為0,標(biāo)志寄存器置為下述狀態(tài)。NV

UP

EI

PL

NE

NA

PO

NC標(biāo)志名置位復(fù)位溢出Overflow(是/否)OVNV方向Direction(減量/增量)DNUP中斷Interrupt(允許/屏蔽)EIDI符號(hào)Sign(負(fù)/正)NGPL零Zero(是/否)ZRNZ輔助進(jìn)位AuxiliaryCarry(是/否)ACNA奇偶Parity(偶/奇)PEPO進(jìn)位Carry(是/否)CYNC注:nv(清除)ov(溢出)方向dn(減)up(增)中斷ei(啟用)di(禁用)正負(fù)ng(負(fù))pl(正)零zr(0)nz(非0)輔助進(jìn)位ac(進(jìn)位)na(不進(jìn)位)奇偶校驗(yàn)pe(偶校驗(yàn))po(奇校驗(yàn))進(jìn)位cy(進(jìn)位)nc(不進(jìn)位))2、DEBUG的主要命令(注意:地址和數(shù)據(jù)的默認(rèn)單位“16進(jìn)制”,不用寫“H”)匯編命令A(yù),格式為:-A[地址]該命令從指定地址開始允許輸入?yún)R編語(yǔ)句,把它們匯編成機(jī)器代碼相繼存放在從指定地址開始的存儲(chǔ)器中。如無“地址”選項(xiàng),則從默認(rèn)地址開始。例如:-a136B:0100movax,100136B:0103movbx,200136B:0106movcx,300

136B:0109movdx,400136B:010Caddax,bx136B:010Esubax,cx136B:0111-反匯編命令U,有兩種格式:1)-U[地址]該命令從指定地址開始,反匯編32個(gè)字節(jié),若地址省略,則從上一個(gè)U命令的最后一條指令的下一個(gè)單元開始顯示32個(gè)字節(jié)。例如:-u13C9:00001EPUSH DS13C9:00012BC0SUB AX,AX13C9:000350PUSH AX13C9:0004B8C313MOV AX,13C313C9:00078ED8MOV DS,AX13C9:0009B8C613MOV AX,13C613C9:000C8EC0MOV ES,AX13C9:000E8D360000LEA SI,[0000]13C9:00128D3E0000LEA DI,[0000]13C9:0016FCCLD 13C9:0017B92800MOV CX,002813C9:001AF3REPZ 13C9:001BA4MOVSB 13C9:001CCBRETF 13C9:001D0000ADD [BX+SI],AL13C9:001F0000ADD [BX+SI],AL2)-U范圍該命令對(duì)指定范圍的內(nèi)存單元進(jìn)行反匯編,例如:-u13c9:000e001b13C9:000E8D360000LEA SI,[0000]13C9:00128D3E0000LEA DI,[0000]13C9:0016FCCLD 13C9:0017B92800MOV CX,002813C9:001AF3REPZ 13C9:001BA4MOVSB -運(yùn)行命令G,格式為:-G[=地址1][地址2]其中地址1規(guī)定了運(yùn)行起始地址,地址2為斷點(diǎn)地址。沒有“=地址1”則從默認(rèn)地址0100H開始。即:-G[斷點(diǎn)地址]程序從當(dāng)前地址0100H開始連續(xù)運(yùn)行到斷點(diǎn)地址。追蹤命令T,有兩種格式:1)逐條指令追蹤:-T[=地址]該命令從指定地址起執(zhí)行一條指令后停下來,顯示寄存器內(nèi)容和狀態(tài)值。無地址則從當(dāng)前默認(rèn)地址開始。-tAX=0000BX=0000CX=007DDX=0000SP=FFFEBP=0000SI=0000DI=0000DS=13B3ES=13B3SS=13C3CS=13C9IP=0001NVUPEIPLNZNAPONC13C9:00012BC0SUB AX,AX-2)多條指令追蹤:-T[=地址][值]該命令從指定地址起執(zhí)行n條命令后停下來,n由[值]確定。-t3AX=0000BX=0000CX=007DDX=0000SP=FFFEBP=0000SI=0000DI=0000DS=13B3ES=13B3SS=13C3CS=13C9IP=0001NVUPEIPLNZNAPONC13C9:00012BC0SUB AX,AXAX=0000BX=0000CX=007DDX=0000SP=FFFEBP=0000SI=0000DI=0000DS=13B3ES=13B3SS=13C3CS=13C9IP=0003NVUPEIPLZRNAPENC13C9:000350PUSH AXAX=0000BX=0000CX=007DDX=0000SP=FFFCBP=0000SI=0000DI=0000DS=13B3ES=13B3SS=13C3CS=13C9IP=0004NVUPEIPLZRNAPENC13C9:0004B8C313MOV AX,13C3顯示內(nèi)存單元內(nèi)容的命令D,格式為:-D[地址]-d13c3:000013C3:00006161616161616161-6161616161616161aaaaaaaaaaaaaaaa13C3:00106161616161616161-6161616161616161aaaaaaaaaaaaaaaa13C3:00206161616161616161-0000000000000000aaaaaaaa13C3:00306161616161616161-6161616161616161aaaaaaaaaaaaaaaa13C3:00406161616161616161-6161616161616161aaaaaaaaaaaaaaaa13C3:00506161616161616161-0000000000000000aaaaaaaa13C3:00601E2BC050B8C3138E-D8B8C6138EC08D36.+.P613C3:007000008D3E0000FCB9-2800F3A4CB000000...>(-修改內(nèi)存單元內(nèi)容的命令E,它有兩種格式:1)用給定的內(nèi)容代替指定范圍的單元內(nèi)容: -E地址內(nèi)容表 例如:-E2000:0100F3“XYZ”8D其中F3,“X”“Y”“Z”和8D各占一個(gè)字節(jié),用這五個(gè)字節(jié)代替原內(nèi)存單元2000:0100到0104的內(nèi)容,“X”“Y”“Z”將分別按它們的ASCII碼值代入。2)逐個(gè)單元相繼地修改: -E地址 例如:-E100: 18E4:010089.78 此命令是將原100號(hào)單元的內(nèi)容89改為78。78是程序員鍵入的。檢查和修改寄存器內(nèi)容的命令R,它有三種方式:1)顯示CPU內(nèi)部所有寄存器內(nèi)容和標(biāo)志位狀態(tài);格式為:-R R命令顯示中標(biāo)志位狀態(tài)的含義如下表所示:標(biāo)志名置位復(fù)位溢出Overflow(是/否)OVNV方向Direction(減量/增量)DNUP中斷Interrupt(允許/屏蔽)EIDI符號(hào)Sign(負(fù)/正)NGPL零Zero(是/否)ZRNZ輔助進(jìn)位AuxiliaryCarry(是/否)ACNA奇偶Parity(偶/奇)PEPO進(jìn)位Carry(是/否)CYNC2)顯示和修改某個(gè)指定寄存器內(nèi)容,格式為: -R寄存器名 例如打入:-RAX 系統(tǒng)將響應(yīng)如下: AXFIF4 : 表示AX當(dāng)前內(nèi)容為F1F4,此時(shí)若不對(duì)其作修改,可按ENTER鍵,否則,打入修改后內(nèi)容,如: -RBX BX0369 :059F 則BX內(nèi)容由0369改為059F3)顯示和修改標(biāo)志位狀態(tài),命令格式為: -RF 系統(tǒng)將給出響應(yīng),如 OVDNEINGZRACPECY- 這時(shí)若不作修改可按ENTER鍵,否則在“-”號(hào)之后鍵入修改值,鍵入順序任意。如 OVDNEINGZRACPECY-PONZDINV(8)退出DEBUG命令Q,該命令格式為 -Q 它退出DEBUG程序,返回DOS。三.實(shí)驗(yàn)要求:反復(fù)練習(xí)熟悉DEBUG各種命令:A命令、U命令、G命令、T命令、R命令、Q命令等等。四.實(shí)驗(yàn)報(bào)告:寫出在DEBUG狀態(tài)下編寫、運(yùn)行程序的過程以及調(diào)試所中遇到的問題是如何解決的,并對(duì)調(diào)試過程中的問題進(jìn)行分析,對(duì)執(zhí)行結(jié)果進(jìn)行分析。實(shí)驗(yàn)二算術(shù)運(yùn)算指令實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、算術(shù)指令的格式、功能及用法。2、熟悉二進(jìn)制數(shù)的四則運(yùn)算指令,掌握各種運(yùn)算指令的格式、用法、尋址方式和對(duì)標(biāo)志位的影響,特別是對(duì)溢出標(biāo)志位CF和OF的影響。二、實(shí)驗(yàn)內(nèi)容1、用加減法指令計(jì)算下列各組十六進(jìn)制數(shù)加減結(jié)果并和你的手算結(jié)果比較:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758H,347FH用R命令檢查各寄存器內(nèi)容,特別注意AX,BX,CX,DX,IP及標(biāo)志位中ZF,CF和AF的內(nèi)容。用R命令將AX,BX內(nèi)容改寫為1050H及23A8H。 2、加減法指令: 1)用A命令在內(nèi)存100H(鍵入:A100,a與100之間有無空格都行)處鍵入下列內(nèi)容: MOV AH,34 MOV AL,22 ADD AL,AH SUB AL,78 MOV CX,1284 MOV DX,5678 ADD CX,DX SUB CX,AX SUB CX,CX 2)用U命令檢查鍵入的程序及對(duì)應(yīng)的機(jī)器碼。 3)用T命令逐條運(yùn)行這些指令,檢查并記錄有關(guān)寄存器及ZF情況。3、帶進(jìn)位加減法: 1)用A命令在內(nèi)存200H處鍵入下列內(nèi)容,并用U命令檢查: MOV AH,12 MOV AL,84 MOV CH,56 MOV CL,78 ADD AL,CL ADC AH,CH MOV DH,A7 MOV DL,58 SUB DL,7F SBB DH,342)用T命令逐條運(yùn)行這些指令,檢查并記錄有寄存器及CF內(nèi)容。 3)上面這段程序若改用16位操作指令達(dá)到同樣結(jié)果,怎么改?試修改并運(yùn)行之。4、BCD碼加減法 1)內(nèi)容: MOV AL,58 ADD AL,25 DAA 2)要求:用A命令鍵入,U命令檢查,T命令逐條運(yùn)行并記錄有關(guān)寄存器及AF內(nèi)容。5、自編程序用16位減法指令編一個(gè)32位(4字節(jié))數(shù)減法程序,調(diào)試并做記錄。三、實(shí)驗(yàn)報(bào)告要求:1、十六進(jìn)制數(shù)加減法手算結(jié)果及實(shí)驗(yàn)結(jié)果2、8086常用指令練習(xí)部分的逐條運(yùn)行記錄,思考結(jié)果及自編程序運(yùn)行記錄(列出自編程序)。3、各項(xiàng)實(shí)驗(yàn)結(jié)果記錄。4、自編程序原稿及調(diào)試后修正稿,寫出原稿錯(cuò)在那里。實(shí)驗(yàn)三串處理指令實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康氖煜ご幚碇噶疃?、?shí)驗(yàn)內(nèi)容及步驟1、分析、理解、跟蹤執(zhí)行下列程序。 movsi,2000 movdi,3000 movcx,000a repmovsb hlt2、數(shù)據(jù)串搬家程序:1)用A命令鍵入下列程序:MOV SI,1000MOV DI,1500MOV CX,0FLOP:MOV AL,[SI]MOV [DI],ALINC SIINC DILOOP LOPINT 202)用A命令DB偽指令在1000H鍵入下列字符串:‘IBM_PCCOMPUTER'3)用G命令運(yùn)行此程序,并用D命令檢查目的地址處的字符與源串是否一致。4)若此程序中的目的地址改為1002H,再運(yùn)行此程序,看能不能把1000H開始的字符串搬到1002H開始的地方去?修改程序以做到這點(diǎn)。3、段寄存器概念及字符串傳送指令練習(xí)1)用A命令鍵入下列程序:MOV SI,0MOV DI,0MOV AX,1000MOV DS,AXMOV AX,1500MOV ES,AXMOV CX,0FCLDREP MOVSBINT 202)用A命令DB偽指令在1000:0000處鍵入字符串'IBM_PCCOMPUTER',并用D命令檢查之。3)用D命令檢查0F00:1000處內(nèi)容,看是否一樣,為什么?4)用G命令運(yùn)行此程序,檢查目的地址1500:0000處內(nèi)容。并記下DS與ES值。5)修改此程序,使ES與DS為同一值,以減少一條指令,而源物理地址和目的物理地址(是多少?)仍和原來一樣。三、實(shí)驗(yàn)報(bào)告要求1、各項(xiàng)實(shí)驗(yàn)記錄和思考題。2、要求你修改的程序的清單(修改后)和調(diào)試記錄。實(shí)驗(yàn)四匯編語(yǔ)言程序的上機(jī)前面三個(gè)實(shí)驗(yàn)都是DEBUG命令實(shí)驗(yàn),即都是在DEBUG軟件支持下完成的匯編語(yǔ)言指令的調(diào)試。一個(gè)完整的匯編語(yǔ)言程序上機(jī)實(shí)驗(yàn)應(yīng)該是:一、建立匯編語(yǔ)言的工作環(huán)境為運(yùn)行匯編語(yǔ)言程序至少要在磁盤上建立以下文件:編輯程序,如EDIT.EXE匯編程序,如MASM.EXE連接程序,如LINK.EXE調(diào)試程序,如DEBUG.COM必要時(shí),還可建立如CREF.EXE,EXE2BIN.EXE等文件。二、在計(jì)算機(jī)上運(yùn)行匯編語(yǔ)言的步驟用編輯程序建立ASM源文件,以ASM作為擴(kuò)展名用匯編程序把ASM文件轉(zhuǎn)換成OBJ文件用連接程序把OBJ文件轉(zhuǎn)換成可執(zhí)行文件在DOS提示符下直接鍵入可執(zhí)行文件名即可執(zhí)行該程序三、建立ASM文件 建立ASM文件的編輯程序可以是DOS自身帶的編輯程序EDIT.EXE,在DOS提示符下鍵入EDIT命令即可出現(xiàn)EDIT界面,其操作如下:D:\>edit源程序輸入完后,以ASM作為擴(kuò)展名進(jìn)行保存,假設(shè)所保存的文件名為:ex.asm。ASM源文件的格式1:;定義數(shù)據(jù)段,如果需要的話,其中segment和ends是一對(duì)偽操作,表示段的開始和結(jié)束datasegment ;數(shù)據(jù)段開始 ;定義數(shù)據(jù)段的主體,如定義變量dataends ;數(shù)據(jù)段結(jié)束;定義附加段,如果需要的話extrasegment ;附加段開始 ;定義附加段的主體,如定義變量extraends ;附加段結(jié)束;定義代碼段,必須的codesegment ;代碼段開始mainprocfar;程序的主體部分,proc和endp這一對(duì)偽操作表示一個(gè)程序模塊的開始和結(jié)束 assumeds:data,es:extra,cs:code ;assume偽操作指定某個(gè)段分配給哪個(gè)段寄存器start: ;程序的入口地址 pushds ;保存原數(shù)據(jù)段 subax,ax ;ax寄存器清零,作為數(shù)據(jù)段0偏移地址 pushax ;數(shù)據(jù)段0偏移地址壓入堆棧中 movax,data movds,ax ;把數(shù)據(jù)段地址裝入數(shù)據(jù)段寄存器ds movax,extra moves,ax ;把附加段地址裝入附加段寄存器es ;自己所要實(shí)現(xiàn)的功能源代碼在此添加 ret ;程序結(jié)束后返回DOSmainendp ;程序的主體部分結(jié)束codeends ;代碼段結(jié)束 endstart ;匯編程序的結(jié)束,程序在start處開始執(zhí)行ASM源文件的格式2:;定義數(shù)據(jù)段,如果需要的話,其中segment和ends是一對(duì)偽操作,表示段的開始和結(jié)束datasegment ;數(shù)據(jù)段開始 ;定義數(shù)據(jù)段的主體,如定義變量dataends ;數(shù)據(jù)段結(jié)束;定義附加段,如果需要的話extrasegment ;附加段開始 ;定義附加段的主體,如定義變量extraends ;附加段結(jié)束;定義代碼段,必須的codesegment ;代碼段開始mainprocfar;程序的主體部分,proc和endp這一對(duì)偽操作表示一個(gè)程序模塊的開始和結(jié)束 assumeds:data,es:extra,cs:code ;assume偽操作指定某個(gè)段分配給哪個(gè)段寄存器start: ;程序的入口地址 movax,data movds,ax ;把數(shù)據(jù)段地址裝入數(shù)據(jù)段寄存器ds movax,extra moves,ax ;把附加段地址裝入附加段寄存器es ;自己所要實(shí)現(xiàn)的功能源代碼在此添加 movax,4c00h ;程序結(jié)束后返回DOS int21hmainendp ;程序的主體部分結(jié)束codeends ;代碼段結(jié)束 endstart ;匯編程序的結(jié)束,程序在start處開始執(zhí)行四、用MASM程序產(chǎn)生OBJ文件 源文件建立后,就要用匯編程序?qū)υ次募R編,匯編后產(chǎn)生二進(jìn)制目標(biāo)文件(以O(shè)BJ作為擴(kuò)展名),其操作如下:D:\>masmex.asm 匯編程序輸入的是ASM文件,其輸出文件可以是3個(gè),第一個(gè)是OBJ文件,這是我們匯編的主要目的。第二個(gè)是LIST文件,稱為列表文件,這個(gè)文件列出源程序和機(jī)器語(yǔ)言程序清單,并給出符號(hào)表,因而可使程序調(diào)試更加方便,這個(gè)文件可有可無,如果不需要,則可對(duì)[NUL.LST]直接按回車鍵。LST清單的最后部分為段名表和符號(hào)表,表中分別給出段名、段的大小及有關(guān)屬性,以及用戶定義的符號(hào)名、類型和屬性。第三個(gè)是CRF文件,這個(gè)文件用來產(chǎn)生交叉引用表REF,對(duì)于一般程序不需要建立此文件。為了建立交叉引用表,必須調(diào)用CREF程序。至此,匯編過程已經(jīng)完成了。但是,匯編程序還有另一個(gè)重要功能,可以給出源程序的出錯(cuò)信息(見后面的附件2)。警告信息(warningerrors)指出匯編程序所認(rèn)為的一般性錯(cuò)誤,嚴(yán)重警告錯(cuò)誤(severeerrors)則指出匯編程序認(rèn)為已使匯編程序無法進(jìn)行正確匯編的錯(cuò)誤。除給出錯(cuò)誤的個(gè)數(shù)外,匯編程序還給出出錯(cuò)信息,包括出錯(cuò)的行和錯(cuò)誤類型。當(dāng)然匯編程序只能給出程序中的語(yǔ)法錯(cuò)誤,至于程序的算法或編制程序中的其他錯(cuò)誤則程序的調(diào)試時(shí)去解決。五、用LINK程序產(chǎn)生EXE文件 在DOS提示符下鍵入LINK命令即可,具體的操作如下:D:\>linkex.obj LINK程序有兩個(gè)輸入文件OBJ和LIB。OBJ是我們需要連接的目標(biāo)文件,LIB則是程序中需要用到的庫(kù)文件,如果程序中沒有用到庫(kù)文件,則直接按回車健。LINK程序有兩個(gè)輸出文件EXE和MAP文件,EXE文件就是可執(zhí)行文件,MAP文件是連接程序的列表文件,又稱為連接映像,它給出每個(gè)段在存儲(chǔ)器中的分配情況。六、程序的執(zhí)行 在DOS提示符下直接鍵入可執(zhí)行的文件名即可,具體的操作如下:D:\>ex七、舉例下面這個(gè)源代碼的功能是在屏幕上顯示一個(gè)字符串“ThisismyfirstASMprogram.”。datasegmentstringdb'ThisismyfirstASMprogram.',13,10,'$';字符串以’$’符號(hào)結(jié)尾,以單引號(hào)括起來dataendscodesegmentmainprocfar assumecs:code,ds:data ;assume偽操作指定某個(gè)段分配給哪個(gè)段寄存器,但它不能把;段地址裝入段寄存器中start: ;程序的入口地址 pushds ;saveolddatasegment subax,ax ;ax寄存器清零,作為數(shù)據(jù)段0偏移地址 pushax ;零偏移地址入棧 movax,data movds,ax ;把數(shù)據(jù)段地址裝入數(shù)據(jù)段寄存器ds leadx,string ;把字符串首地址裝入dx寄存器,或?qū)懗蒻ovdx,offsetstring movah,9 ;DOS功能調(diào)用,在屏幕上顯示字符串 int21h ;DOS中斷 ret ;returntoDOSmainendpcodeends endstart ;匯編的結(jié)束,程序在此執(zhí)行請(qǐng)利用DOS下自身帶的編輯程序EDIT.EX,或利用Windows下的記事本,將上面的源代碼編輯成ASM文件,存入相應(yīng)文件夾中,注意文件的擴(kuò)展名一定是.ASM,如:ex.asm。在計(jì)算機(jī)上運(yùn)行匯編語(yǔ)言的步驟:用編輯程序建立ASM源文件,以ASM作為擴(kuò)展名用匯編程序把ASM文件轉(zhuǎn)換成OBJ文件用連接程序把OBJ文件轉(zhuǎn)換成可執(zhí)行文件在DOS提示符下直接鍵入可執(zhí)行文件名即可執(zhí)行該程序?qū)懗鰧?shí)驗(yàn)報(bào)告。實(shí)驗(yàn)五分支程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?1、熟練掌握邏輯運(yùn)算和轉(zhuǎn)移指令 1)

邏輯運(yùn)算指令 2)

標(biāo)號(hào)和無條件轉(zhuǎn)移指令 3)

比較指令和條件轉(zhuǎn)移指令 2、掌握分支程序設(shè)計(jì)的原理和方法,重點(diǎn)掌握各種分支程序中形成和判斷條件而產(chǎn)生的程序段的設(shè)計(jì)方法和技巧.二、實(shí)驗(yàn)內(nèi)容1、練習(xí)邏輯運(yùn)算指令、比較指令和條件轉(zhuǎn)移指令的功能、用法以及與標(biāo)志位的關(guān)系和可用的尋址方式2、用地址表法,完成下面要求的多分支程序的設(shè)計(jì)。根據(jù)MODE單元中的模式字(0-7)分別轉(zhuǎn)向L0-L7標(biāo)號(hào)處執(zhí)行。L0-L7處分別完成顯示‘0’-‘7’字符。 當(dāng)MODE=0時(shí),轉(zhuǎn)L0標(biāo)號(hào),完成顯示‘0’ 當(dāng)MODE=1時(shí),轉(zhuǎn)L1標(biāo)號(hào),完成顯示‘1’ 當(dāng)MODE=2時(shí),轉(zhuǎn)L2標(biāo)號(hào),完成顯示‘2’ 當(dāng)MODE=3時(shí),轉(zhuǎn)L3標(biāo)號(hào),完成顯示‘3’ 當(dāng)MODE=4時(shí),轉(zhuǎn)L4標(biāo)號(hào),完成顯示‘4’ 當(dāng)MODE=5時(shí),轉(zhuǎn)L5標(biāo)號(hào),完成顯示‘5’ 當(dāng)MODE=6時(shí),轉(zhuǎn)L6標(biāo)號(hào),完成顯示‘6’ 當(dāng)MODE=7時(shí),轉(zhuǎn)L7標(biāo)號(hào),完成顯示‘7’3、編制程序?qū)崿F(xiàn)如下操作:設(shè)有10個(gè)學(xué)生成績(jī),分別統(tǒng)計(jì)低于60分、60~69分、70~79分、80~89分、90~99分及100分的人數(shù),并存放于S5、S6、S7、S8、S9、S10單元中。程序清單: ; 統(tǒng)計(jì)學(xué)生成績(jī) DATA SEGMENT GRADEDW95H,60H,75H,92H,71H,86H,54H,89H,83H,76H NEQU($—GRADE)/2 ORG30H S5 DW0 S6 DW0 S7 DW0 S8 DW0 S9 DW0 S10 DW0 DATA ENDS ; STACK SEGMENTSTACK STA DB20DUP(0)TOPEQU$—STA STACKENDS ; CODE SEGMENT MAIN PROCFAR ASSUMECS:CODE,DS:DATA,SS:STACK START:PUSHDS SUBAX,AXPUSHAX MOVAX,DATA MOVDS,AX MOVCX,N LEABX,GRADE;成績(jī)表首地址 COMPARE: MOVAX,[BX] CMPAX,60H;<60? JCFIVE CMPAX,70H ;<70? JCSIX CMPAX,80H ;<80? JCSEVEN CMPAX,90H ;<90? JCEIGHT CMPAX,100H ;=100 JNENINE INCS10 JMPCHA NINE:INCS9 JMPCHA EIGHT:INCS8 JMPCHA SEVEN: INCS7 JMPCHA SIX: INCS6 JMPCHA FIVE: INCS5 JMPCHA CHA:ADDBX,2 ;循環(huán)學(xué)生人數(shù) LOOPCOMPARE RET MAINENDP CODEENDS ENDSTART 執(zhí)行程序后,將結(jié)果分別填入下列表中N(總?cè)藬?shù))S5S6S7S8S9S10三、實(shí)驗(yàn)要求:1、在BLOCK開始的內(nèi)存單元中有若干以字節(jié)為單位的正、負(fù)數(shù),自編程序,試統(tǒng)計(jì)其中正數(shù)的個(gè)數(shù)存放于M_DATA單元中,負(fù)數(shù)的個(gè)數(shù)存放于P_DATA單元中。2、在BLOCK開始的內(nèi)存單元中有若干以字節(jié)為單位的奇、偶數(shù),自編程序,試統(tǒng)計(jì)其中偶數(shù)的個(gè)數(shù)存放于M_DATA單元中,奇數(shù)的個(gè)數(shù)存放于P_DATA單元中。部分程序清單BLOCKDB37,—90,—32,60,—7,—120 COUNTEQU$—BLOCK P_DATADBCOUNTDCP(0) M_DATADBCOUNTDCP(0) ……………LEASI,BLOOKLEADI,P_DATALEABX,M_DATAMOVCX,COUNT RETRY:MOV AL,[SI]CMP AL,0JGE PPMOV [BX],ALINC BXJMP LOOP1 PP:MOV[DI],ALINC DI LOOP1:INC SI LOOPRETRY……………要求: 1.分析問題,畫出算法框圖。寫實(shí)驗(yàn)預(yù)習(xí)報(bào)告。 2.用匯編語(yǔ)言格式編寫程序。 3.在DOS下編輯、匯編、連接程序。 4.用Debug調(diào)試程序。 5.在DOS下運(yùn)行并分析結(jié)果。6.寫實(shí)驗(yàn)報(bào)告,畫出算法框圖實(shí)驗(yàn)六子程序結(jié)構(gòu)一、實(shí)驗(yàn)?zāi)康?、掌握程序設(shè)計(jì)方法,合理劃分層次。2、掌握子程序的調(diào)用與返回的方法。3、了解子程序的嵌套與遞歸。二.實(shí)驗(yàn)內(nèi)容與要求1、將主程序中BX寄存器內(nèi)的二進(jìn)制數(shù)用十六進(jìn)制數(shù)的形式在屏幕上顯示出來。實(shí)驗(yàn)參考程序:code segmentmain procfar assumecs:codestart: pushds xorax,ax pushax movbx,1234hcallsub1 retmain endpsub1 procnear movch,4rotate: movcl,4 rolbx,cl moval,bl andal,0fh addal,30h cmpal,3ah jlprintit addal,7hprintit:movdl,al movah,2 int21h decch jnzrotate retsub1 endpcodeends end要求:分析問題,畫出算法框圖。寫實(shí)驗(yàn)預(yù)習(xí)報(bào)告。用匯編語(yǔ)言格式編寫程序。在上題的基礎(chǔ),將MEM中的4個(gè)字節(jié)內(nèi)容輸出到屏幕顯示。在DOS下編輯、匯編、連接程序。在DOS下運(yùn)行并分析結(jié)果。寫實(shí)驗(yàn)報(bào)告,畫出算法框圖。2、編制一程序,要求鍵入一個(gè)班的學(xué)生成績(jī),并存放于50字的ERADE數(shù)組中,然后根據(jù)ERADE中的成績(jī),把學(xué)生名次填入50字的RANK數(shù)組中,再按學(xué)號(hào)順序把名次從終端上顯示出來。提示:程序MAIN功能:根據(jù)輸入的學(xué)生成績(jī),計(jì)算并顯示出學(xué)生名次。程序INPUT功能:接收一個(gè)班級(jí)學(xué)生的成績(jī),各成績(jī)之間用空格隔開。程序RANKP功能:計(jì)算一個(gè)班級(jí)學(xué)生的名次。(可參照循環(huán)程序(一)中的程序段)程序OUTPUT功能:輸出(顯示)一個(gè)班級(jí)的學(xué)生名次程序DECIBIN功能:十進(jìn)制轉(zhuǎn)換二進(jìn)制,存入BX程序BINDEC功能:十進(jìn)制轉(zhuǎn)換二進(jìn)制,并在屏幕上顯示。程序DEC_DIV功能:BX的內(nèi)容除以CX的內(nèi)容,并在屏幕上顯示一位商。部分程序清單:1)鍵入學(xué)生成績(jī)(成績(jī)之間用空格間隔,回車結(jié)束輸入) INPUT PROC MOV SI,0 MOV COUNT,0ENTER:CALL DECIBIN INC COUNTCMP DL,‘’JZ STORECMP DL,0DHJZ EXITJMP RET1STORE:MOV GRADE[SI],BX ADD SI,2 JMP ENTEREXIT:MOV GRADE[SI],BXRET1: RETINPUT ENDP2)十進(jìn)制轉(zhuǎn)換成二進(jìn)制DECIBIN PROCMOV BX,0NEM: MOV AH,1INT 21HMOVDL,ALCMPAL,30HJL EXIT1CMP AL,39HJG EXITSUB AL,30HCBWXCHGAX,BXMOVCX,10MUL CLXCHGAX,BXADD BX,AXJMP NEWEXIT1:RETDECIBIN ENDP3)二進(jìn)制轉(zhuǎn)換成十進(jìn)制BINIDECPROCPUSH BXPUSH CXPUSH SIPUSH DIMOV CX,100CALL DEC_DIVMOV CX,10CALL DEC_DIVMOV CX,1CALL DEC_DIVPOP DI POP SIPOP CXPOP BXRETBINIDEC ENDP4)十進(jìn)制轉(zhuǎn)換成ASCII碼,并輸出DEC_DIV PROCMOV AX,BXMOV DX,0DIV CXMOV BX,DXMOV DL,ALADD DL,30HMOV AH,02HINT 21HRETDEC_DIV ENDP要求:1)自編程序 主程序MAIN,子程序OUTPUT和子程序RANKP。2)將上述程序與自編程序統(tǒng)調(diào)。3)輸入本班級(jí)某門基礎(chǔ)課成績(jī)。思考題1)寫出4位BCD碼轉(zhuǎn)二進(jìn)制數(shù)的算法。2)寫出AX中進(jìn)二制數(shù)轉(zhuǎn)BCD碼的算法。3)將上述子程序結(jié)構(gòu)改為模塊化程序設(shè)計(jì)。實(shí)驗(yàn)七DOS功能調(diào)用一、實(shí)驗(yàn)?zāi)康模?、掌握DOS功能調(diào)用的使用方法。2、進(jìn)一步熟悉子程序的應(yīng)用。二、實(shí)驗(yàn)內(nèi)容:1、從鍵盤輸入數(shù)據(jù)并顯示1)從鍵盤輸入字符。2)刪除指定的字符。3)將剩余字符在屏幕上顯示。參考程序:datasegmentbufferdb80dup(?)flagdb?dataendscodesegmentmainprocfar assumecs:code,ds:datastart:pushds xorax,ax pushax movax,data movds,ax movbx,offsetbuffer movflag,0next:movah,01h int21h testflag,01h jnzfollow cmpal,20h jnzexit movflag,1 jmpnextfollow:cmpal,20h jzexit mov[bx],al incbx jmpnextexit:mov[bx],al movdi,offsetbuffer moval,'5' calldel movsi,offsetbuffer calldisp retmainendpdelprocnear cldloop1:movah,[di] cmpah,20h jzexit0 cmpal,[di] jzloop2 incdi jmploop1loop2:moval,[di+1] mov[di],al cmpal,20h jzexit0 incdi jmploop2exit0:retdelendpdispprocneardisp0:movdl,[si] movah,02h int21h incsi moval,[si] cmpal,20h jnzdisp0 retdispendpcodeendsendstart2、輸入以空格開始以空格結(jié)束的一串字符,并在另一行顯示。參考程序:datasegmentbufferdb80dup(?)flagdb?dataendscodesegmentmainprocfarassumecs:code,ds:datastart:pushdsxorax,axpushaxmovax,datamovds,axmovbx,offsetbuffermovflag,0next:movah,01hint21htestflag,01hjnzfollowcmpal,20hjnzexitmovflag,1jmpnextfollow:cmpal,20hjzexitmov[bx],alincbxjmpnextexit:retmainendpcodeendsendstart3、主程序調(diào)用三個(gè)子程序,子程序分別實(shí)現(xiàn)輸入一串字符,刪除特定字符,并顯示剩余字符。參考程序:datasegmentbufferdb80dup(?)flagdb?dataendscodesegmentmainprocfarassumecs:code,ds:datastart:pushdsxorax,axpushaxmovax,datamovds,axmovbx,offsetbuffermovflag,0next:movah,01hint21htestflag,01hjnzfollowcmpal,20hjnzexitmovflag,1jmpnextfollow:cmpal,20hjzexitmov[bx],alincbxjmpnextexit:mov[bx],almovdi,offsetbuffermoval,'5'calldelmovsi,offsetbuffercalldispretmainendpdelprocnearcldloop1:movah,[di]cmpah,20hjzexit0cmpal,[di]jzloop2incdijmploop1loop2:moval,[di+1]mov[di],alcmpal,20hjzexit0incdijmploop2exit0:retdelendpdispprocneardisp0:movdl,[si]movah,02hint21hincsimoval,[si]cmpal,20hjnzdisp0retdispendpcodeendsendstart三、實(shí)驗(yàn)步驟和要求:1、分析問題,畫出算法框圖。2、在DOS下編輯、匯編、連接程序。3、用Debug調(diào)試程序。4、在DOS下運(yùn)行并分析結(jié)果。實(shí)驗(yàn)八分支程序設(shè)計(jì)一、實(shí)驗(yàn)?zāi)康?1、熟練掌握邏輯運(yùn)算和轉(zhuǎn)移指令 1)

邏輯運(yùn)算指令 2)

標(biāo)號(hào)和無條件轉(zhuǎn)移指令 3)

比較指令和條件轉(zhuǎn)移指令 2、掌握分支程序設(shè)計(jì)的原理和方法,重點(diǎn)掌握各種分支程序中形成和判斷條件而產(chǎn)生的程序段的設(shè)計(jì)方法和技巧.二、實(shí)驗(yàn)內(nèi)容1、練習(xí)邏輯運(yùn)算指令、比較指令和條件轉(zhuǎn)移指令的功能、用法以及與標(biāo)志位的關(guān)系和可用的尋址方式2、用地址表法,完成下面要求的多分支程序的設(shè)計(jì)。根據(jù)MODE單元中的模式字(0-7)分別轉(zhuǎn)向L0-L7標(biāo)號(hào)處執(zhí)行。L0-L7處分別完成顯示‘0’-‘7’字符。 當(dāng)MODE=0時(shí),轉(zhuǎn)L0標(biāo)號(hào),完成顯示‘0’ 當(dāng)MODE=1時(shí),轉(zhuǎn)L1標(biāo)號(hào),完成顯示‘1’ 當(dāng)MODE=2時(shí),轉(zhuǎn)L2標(biāo)號(hào),完成顯示‘2’ 當(dāng)MODE=3時(shí),轉(zhuǎn)L3標(biāo)號(hào),完成顯示‘3’ 當(dāng)MODE=4時(shí),轉(zhuǎn)L4標(biāo)號(hào),完成顯示‘4’ 當(dāng)MODE=5時(shí),轉(zhuǎn)L5標(biāo)號(hào),完成顯示‘5’ 當(dāng)MODE=6時(shí),轉(zhuǎn)L6標(biāo)號(hào),完成顯示‘6’ 當(dāng)MODE=7時(shí),轉(zhuǎn)L7標(biāo)號(hào),完成顯示‘7’3、編制程序?qū)崿F(xiàn)如下操作:設(shè)有10個(gè)學(xué)生成績(jī),分別統(tǒng)計(jì)低于60分、60~69分、70~79分、80~89分、90~99分及100分的人數(shù),并存放于S5、S6、S7、S8、S9、S10單元中。程序清單: ; 統(tǒng)計(jì)學(xué)生成績(jī) DATA SEGMENT GRADEDW95H,60H,75H,92H,71H,86H,54H,89H,83H,76H NEQU($—GRADE)/2 ORG30H S5 DW0 S6 DW0 S7 DW0 S8 DW0 S9 DW0 S10 DW0 DATA ENDS ; STACK SEGMENTSTACK STA DB20DUP(0)TOPEQU$—STA STACKENDS ; CODE SEGMENT MAIN PROCFAR ASSUMECS:CODE,DS:DATA,SS:STACK START:PUSHDS SUBAX,AXPUSHAX MOVAX,DATA MOVDS,AX MOVCX,N LEABX,GRADE;成績(jī)表首地址 COMPARE: MOVAX,[BX] CMPAX,60H;<60? JLFIVE CMPAX,70H ;<70? JLSIX CMPAX,80H ;<80? JLSEVEN CMPAX,90H ;<90? JLEIGHT CMPAX,100H ;=100 JNENINE INCS10 JMPCHA NINE:INCS9 JMPCHA EIGHT:INCS8 JMPCHA SEVEN: INCS7 JMPCHA SIX: INCS6 JMPCHA FIVE: INCS5 JMPCHA CHA:ADDBX,2 ;循環(huán)學(xué)生人數(shù) LOOPCOMPARE RET MAINENDP CODEENDS ENDSTART 執(zhí)行程序后,將結(jié)果分別填入下列表中N(總?cè)藬?shù))S5S6S7S8S9S10三、實(shí)驗(yàn)要求:1、在BLOCK開始的內(nèi)存單元中有若干以字節(jié)為單位的正、負(fù)數(shù),自編程序,試統(tǒng)計(jì)其中正數(shù)的個(gè)數(shù)存放于M_DATA單元中,負(fù)數(shù)的個(gè)數(shù)存放于P_DATA單元中。2、在BLOCK開始的內(nèi)存單元中有若干以字節(jié)為單位的奇、偶數(shù),自編程序,試統(tǒng)計(jì)其中偶數(shù)的個(gè)數(shù)存放于M_DATA單元中,奇數(shù)的個(gè)數(shù)存放于P_DATA單元中。部分程序清單BLOCKDB37,—90,—32,60,—7,—120 COUNTEQU$—BLOCK P_DATADBCOUNTDCP(0) M_DATADBCOUNTDCP(0) ……………LEASI,BLOOKLEADI,P_DATALEABX,M_DATAMOVCX,COUNT RETRY:MOV AL,[SI]CMP AL,0JGE PPMOV [BX],ALINC BXJMP LOOP1 PP:MOV[DI],ALINC DI LOOP1:INC SI LOOPRETRY……………要求: 1.分析問題,畫出算法框圖。寫實(shí)驗(yàn)預(yù)習(xí)報(bào)告。 2.用匯編語(yǔ)言格式編寫程序。 3.在DOS下編輯、匯編、連接程序。 4.用Debug調(diào)試程序。 5.在DOS下運(yùn)行并分析結(jié)果。 6.寫實(shí)驗(yàn)報(bào)告,畫出算法框圖。附錄1ASCII碼表編碼字符編碼字符編碼字符編碼字符00NUL20SPACE40@60`01SOH21!41A61a02STX22“42B62b03ETX23#43C63c04EOT24$44D64d05ENQ25%45E65e06ACK26&46F66f07BEL27‘47G67g08BS28(48H68h09HT29)49I69i0ALF2A*4AJ6Aj0BVT2B+4BK6Bk0CFF2C,4CL6Cl0DCR2D-4DM6Dm0ESO2E.4EN6En0FSI2F/4FO6Fo10DEL30050P70p11DC131151Q71q12DC232252R72r13DC333353S73s14DC434454T74t15NAK35555U75u16SYN36656V76v17ETB37757W77w18CAN38858X78x19EM39959Y79y1ASUB3A:5AZ7Az1BESC3B;5B[7B{1CFS3C<5C\7C|1DGS3D=5D]7D}1ERS3E>5E^7E~1FUS3F?5F_7FDEL

附錄2匯編語(yǔ)言常用出錯(cuò)信息匯編程序在對(duì)源程序的匯編過程中,若檢查出某語(yǔ)句有語(yǔ)法錯(cuò)誤,隨時(shí)在屏幕上給出出錯(cuò)信息。如操作人員指定的列表文件名(即.LST),匯編程序亦將在列表文件中出錯(cuò)的下面給出出錯(cuò)信息,以便操作人員即時(shí)查找錯(cuò)誤,給予更正。MASM5.0出錯(cuò)信息格式如下:源程序文件行:WARNING/ERROR錯(cuò)誤信息碼:錯(cuò)誤描述信息其中,錯(cuò)誤描述信息碼由五個(gè)字符組成。第一個(gè)是字母A,表示匯編語(yǔ)言程序出錯(cuò);接著有一個(gè)數(shù)字指明出錯(cuò)類別:‘2’為嚴(yán)重錯(cuò)誤,‘4’為嚴(yán)肅警告,‘5’為建議性警告,最后三位為錯(cuò)誤編號(hào)。錯(cuò)誤編號(hào)錯(cuò)誤描述0Blocknestingerror嵌套出錯(cuò)。嵌套的過程、段、結(jié)構(gòu)、宏指令或重復(fù)塊等非正常結(jié)束。例如在嵌套語(yǔ)句中有外層的結(jié)束語(yǔ)句,而無內(nèi)層的結(jié)束語(yǔ)局1Extracharactersonline一語(yǔ)句行有多余字符,可能是語(yǔ)句中給出的參數(shù)太多2Internalerror-Registeralreadydefined這是一個(gè)內(nèi)部錯(cuò)誤。如出現(xiàn)該錯(cuò)誤,請(qǐng)記下發(fā)生錯(cuò)誤的條件,并使用ProductAssistanceRequest表與Microsoft公司聯(lián)系3Unkowntypespecifer未知的類型說明符。例如類型字符拼錯(cuò),把BYTE寫成BIT,NEAR寫成NAER等4Redefinitionofsymbol符號(hào)重定義。同一標(biāo)識(shí)符在兩個(gè)位置上定義。在匯編第一遍掃描時(shí),在這個(gè)標(biāo)識(shí)符的第二個(gè)定義位置上給出這個(gè)錯(cuò)誤5Symbolismultidefined符號(hào)多重定義。同一標(biāo)識(shí)符在兩個(gè)位置上定義。在匯編第二遍掃描時(shí),每當(dāng)遇到這個(gè)標(biāo)識(shí)符都給出這個(gè)錯(cuò)誤6Phaseerrorbetweenpasses兩次掃描間的遍錯(cuò)。一個(gè)標(biāo)號(hào)在二次掃描時(shí)得到不同的地址值,就會(huì)給出這種錯(cuò)誤。若在啟動(dòng)MASM時(shí)使用/D任選項(xiàng),產(chǎn)生第一遍掃描的列表文件,它可幫助你查找這種錯(cuò)誤7AlreadyhadELSEclause已有ELSE語(yǔ)句。在一個(gè)條件塊里使用多于一個(gè)的ELSE語(yǔ)句8Mustbeinconditionalblock沒有在條件塊里。通常是有ENDIF或ELSE語(yǔ)句,而無IF語(yǔ)句9Symbolnotdefined符號(hào)未定義,在程序中引用了未定義的標(biāo)識(shí)符10Syntaxerror語(yǔ)法錯(cuò)誤。不是匯編程序所能識(shí)別的一個(gè)語(yǔ)句11Typeillegalincontext指定非法類型。例如對(duì)一個(gè)過程指定BYTE類型,而不是NEAR或FAR12Groupnamemustbeunique組名應(yīng)是唯一的。作為組名的符號(hào)作為其他符號(hào)使用13Mustbedeclaredduringpass1必須在第一遍掃描期間定義。在第一遍掃描期間,如一個(gè)符號(hào)在未定義前就引用,就會(huì)出現(xiàn)這種錯(cuò)誤。14Illegalpublicdeclaration一個(gè)標(biāo)識(shí)符被非法的指定為PUBLIC類型15Symbolalreadydefferentkind重新定義一個(gè)符號(hào)為不同種類符號(hào)。例如一個(gè)段名重新被當(dāng)作變量名定義使用16Reservedwordusedassymbol把匯編語(yǔ)言規(guī)定的保留字作標(biāo)識(shí)符使用17Forwardreferenceillegal非法的向前引用。在第一遍掃描期間,引用一個(gè)未定義符號(hào)。18Operandmustberegister操作數(shù)位置上應(yīng)是寄存器,但出現(xiàn)了標(biāo)識(shí)符19Wrongtypeofregister使用寄存器出錯(cuò)20Operandmustbesegmentorgroup應(yīng)該給出一個(gè)段名或組名。例如ASSUME語(yǔ)句中應(yīng)為某段寄存器和指定一個(gè)段名或組名,而不應(yīng)是別的標(biāo)號(hào)或變量名等21Symbolhasnosegment不知道標(biāo)識(shí)符的段屬性22Operandmustbetypespecifier操作數(shù)應(yīng)給出類型說明,如NEAR、FAR、BYTE等23Symbolalreaddefinedlocally以被指定為內(nèi)部的標(biāo)識(shí)符,企圖在EXTRN語(yǔ)句中又定義外部標(biāo)識(shí)24Segmentparanetersarechanged段參數(shù)被改變。如同一標(biāo)識(shí)符定義在不同段內(nèi)25Improperalign/combintype段定義時(shí)的定位類型/組合類型使用出錯(cuò)26Referencetomultidefinedsymbol指令引用了多重定義的標(biāo)識(shí)符27Operandexpected需要一個(gè)操作數(shù),只有操作符28Operatorexpected需要一個(gè)操作符,但只有操作數(shù)29Divdsionby0oroverflow除以0或溢出30Negativeshiftcount\運(yùn)算符SHL或SHR的移位表達(dá)式值為負(fù)數(shù)31Operandtypemustmatch操作數(shù)類型不匹配。雙操作數(shù)指令的兩個(gè)操作數(shù)長(zhǎng)度不一致,一個(gè)是字節(jié),一個(gè)是字32Illegaluseofexternal外部符號(hào)使用出錯(cuò)33Mustberecordfieldname應(yīng)為記錄字段名。在記錄字段名位置上出現(xiàn)另外的符號(hào)34Mustberecordnameorfieldname應(yīng)為記錄名或記錄字段名。在記錄名或記錄字段名位置上出現(xiàn)另外的符號(hào)35Operandmustbesize應(yīng)指明操作數(shù)的長(zhǎng)度(如BYTE、WORD等)。通常使用PTR運(yùn)算即可改正36Mustbevariable,label,orconstant應(yīng)該是變量名、標(biāo)號(hào)、或常數(shù)的位置上出現(xiàn)了其他信息37Mustbestucturefieldname應(yīng)該為結(jié)構(gòu)字段名。在結(jié)構(gòu)字段名位置上出現(xiàn)了另外的符號(hào)38Lefeoperandmustsegment操作數(shù)的左邊應(yīng)該是段的信息。如設(shè)DA1、DA2均是變量名,下列語(yǔ)句就是錯(cuò)誤的:“MOVAX,DA1:DA2”。DA1位置上應(yīng)使用某段寄存器名39Oneoperandmustconstant操作數(shù)必須是常數(shù)。40Operandmustbeinsamesegmentor

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論