




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、匯編語(yǔ)言程序設(shè)計(jì)(第二版)錢曉捷習(xí)題答案第二章()2.1(1)AX1200h (2)AX0100h (3)AX4C2Ah (4)AX3412h (5)AX4C2Ah (6)AX7856h (7)AX65B7h 2.2(1) 兩操作數(shù)類型不匹配 (2) IP指令指針禁止用戶訪問(wèn) (3) 立即數(shù)不允許傳給段寄存器 (4) 段寄存器之間不允許傳送 (5)
2、160; 兩操作數(shù)類型不匹配 (6) 目的操作數(shù)應(yīng)為 BP (7) 源操作數(shù)應(yīng)為 BX+DI (8) 立即數(shù)不能作目的操作數(shù)2.3lea bx,table ;獲取table的首地址,BX200H mov al,8 ;傳送欲轉(zhuǎn)換的數(shù)字,AL8 xlat
3、160; ;轉(zhuǎn)換為格雷碼,AL12H 2.4 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop bx ;DS:0f79h=8057
4、h 2.6AL=89h CF ZF SF OF PF AL=12h 1
5、0 0 1 1 AL=0afh 0 0 1
6、60; 0 1 AL=0afh 1 0 1 0 1 AL=00h
7、0; 0 1 0 0 1 AL=0ffh 0 0
8、 1 0 1 AL=00h 0 1 0
9、; 0 1 堆棧是一種按“先進(jìn)后出”原則存取數(shù)據(jù)的存儲(chǔ)區(qū)域。 堆棧的兩種基本操作是壓棧和出棧,對(duì)應(yīng)的指令是PUSH和POP。2.5 2.7 W=X+Y+24-Z2.8(1)ADD DX,BX (2)ADD AL,BX+SI (3)ADD BX+0B2H,CX (4)ADD WORD PTR 0520H,3412H (5)ADD AL,0A0H 2.9;為了避免與操作數(shù)地址混淆,將題中X,Y,Z,V 字操作數(shù)改為A,B,
10、C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (將操作數(shù)看作符號(hào)數(shù),以下同)
11、 mov cx,ax mov bx,dx ;bx,ax <- dx,ax =A*B mov ax,Z ;a
12、x = C cwd ;dx,ax =C (擴(kuò)展符號(hào)后為雙字) add cx,ax adc bx,dx
13、; ;bx,cx <- bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx<- A*B+C-540 mov ax, V &
14、#160;;ax= D cwd ;dx,ax= D (擴(kuò)展符號(hào)后為雙字) sub ax, cx sbb dx, bx
15、0; ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;運(yùn)算結(jié)果:D-(A*B+C-540h)/A ;ax存商,dx存余數(shù) 2.10;(1)xchg的操作數(shù)不能是立即數(shù) (2不能對(duì)CS直接賦值 (3)兩個(gè)操作數(shù)不能都是存儲(chǔ)單元 (4)堆棧的操作數(shù)不能是字節(jié)量 (5)adc的操作數(shù)不能是段寄存器 (6)沒(méi)有確定是字節(jié)還是字操作 (7)in不支持超過(guò)FFH的直接尋址 (8)out只能以AL/AX為源操作數(shù) 第二章(
16、02) 2.11;指令A(yù)X的值CFOFSFZFPFMov ax,1407h1470h-And ax,ax1470h00000Or ax,ax1470h00000Xor ax,ax000011Not ax0ffffh-Test ax,0f0f0h0ffffh0010
17、1注意: 1. mov, not指令不影響標(biāo)志位 2. 其他邏輯指令使CF=OF=0, 根據(jù)結(jié)果影響其他標(biāo)志位。
18、60; 第2章(03)2.12;指令
19、 注釋 執(zhí)行結(jié)果 CF OF SF ZF PF mov si,ax si=ax
20、; si=0008h - - - - - shl si,1 si=2*ax si=0010h
21、160; 0 0 0 0 0 add si,ax si=3*ax si=0018h 0 0 0 &
22、#160; 0 1 mov dx,bx dx=bx dx=0010h - - - - - mov cl,03h
23、; cl=03h - - - - - shl dx,cl
24、160; dx=8*bx dx=0080h 0 u 0 0 0 sub dx,bx dx=7*bx
25、; dx=0070h 0 0 0 0 0 add dx,si dx=7*bx+3*ax dx=0088h
26、160; 0 0 0 0 1 注意: 1. 左移N次相當(dāng)于乘于2的N次方,右左移N次相當(dāng)于除乘于2的N次方。 2. 移位指令根據(jù)是否移入“1”到CF,設(shè)置CF,根據(jù)移位后的結(jié)果影響SF,ZF,PF。根據(jù)最高符號(hào)位是否改變?cè)O(shè)置OF,如改變 OF=1. 3. u 表示無(wú)定義, - 表示無(wú)影響。2.13; (1) ;不考慮進(jìn)位mov bl,al mov cl,3 shl al,cl add al,bl ;shl bl,1 add al
27、,bl ;考慮進(jìn)位xor ah,ah mov bx,ax mov cl,3 shl ax,cl add ax,bx ;shl bx,1 add ax,bx (2) 數(shù)字09的ASCII碼是:30h39h 非壓縮BCD碼的09是:00h09h 方法一: and al,0fh ;實(shí)現(xiàn)ASCII到非壓縮BCD碼的轉(zhuǎn)換 or al,30h ;實(shí)現(xiàn)非壓縮BCD碼到ASCII的轉(zhuǎn)換 方法二: xor al,30h ;求
28、反D5D4位,其他不變 ;即高4位為3,則變?yōu)?;高4位為0,則變?yōu)? mov cl,4 again: shr dx,1 ;實(shí)現(xiàn)邏輯右移 ;采用“sar dx,1”,則實(shí)現(xiàn)算術(shù)右移 rcr ax,1 dec cl jnz again 2.14; (1)用sar編寫 2.20; 8086的條件轉(zhuǎn)移的轉(zhuǎn)移范圍:在當(dāng)前指令地址的 +127- -128之內(nèi)。 如條件轉(zhuǎn)移的轉(zhuǎn)移范圍超出此范圍,可在此范圍內(nèi)安排
29、一條無(wú)條件轉(zhuǎn)移,再轉(zhuǎn)移到范圍外的目標(biāo)地址。2.21; (1)JMP Bx ;轉(zhuǎn)移的有效地址EA=BX=1256h (2)JMP tABLEBx ;轉(zhuǎn)移的有效地址EA=ds:20a1h+1256h=232f7=3280h (3)JMP Bxsi ;轉(zhuǎn)移的有效地址EA=ds:1256h+528fh=264e5h=2450h2.22; (1) xor ax,1e1eh je equal &
30、#160; ;AX1e1eh(異或后為0) (2)test al,10000001b jnz there ;AL的D0或D7至少有一位為1 (3) cmp cx,64h jb there ;CX(無(wú)符號(hào)數(shù)) 64h 2.23;mov cx,0 不循環(huán),
31、因?yàn)橐贿M(jìn)入循環(huán)就判 cx=0? 如cx=0 就退出循環(huán) delay:loop delay 2.24; (1)若DX > DI,轉(zhuǎn)到above執(zhí)行 cmp dx,di ja above ;jnbe above (2)若AX > SI,轉(zhuǎn)到greater執(zhí)行 cmp ax,si
32、0; jg greater ;jnle greater (3)若CX = 0,轉(zhuǎn)到zero執(zhí)行 cmp cx,0 jcxz zero jz zero (4)若AXSI產(chǎn)生溢出,轉(zhuǎn)到
33、overflow執(zhí)行; cmp ax,di jo overflow (5)若SIAX,轉(zhuǎn)到less_eq執(zhí)行; cmp si,ax cmp ax,si
34、; jle less_eq jge less_eq (6)若DIDX,轉(zhuǎn)到below_eq執(zhí)行。 cmp di,dx cmp dx,di
35、160; jbe below_eq jae below_eq2.25; 答:將首地址為array得20個(gè)字的數(shù)組求和,并將結(jié)果存入 total 單元中。2.26; (1) mov si,0 mov dl,stringsi ;第1個(gè)字符送dl寄存器 mov si,5
36、160; mov dh,stringsi ;第6個(gè)字符送dh寄存器 (2) xor si,si ;si清零 mov al,buffersi
37、0; ;第一字節(jié) inc si mov ah,buffersi ;第二字節(jié) mov cl,4 shl ah,cl ;BCD碼移到高半字節(jié)
38、160; or al,ah ;組合成壓縮BCD碼 mov dl,al
39、160; ;存入dl寄. inc si mov al,buffersi ;第三字節(jié) inc si mov ah,buffersi ;第四字節(jié) mov cl,4 shl ah,cl
40、0; ;BCD碼移到高半字節(jié) or al,ah ;組合成壓縮BCD碼 mov dh,al ;存入dh寄. (3)
41、0; test dx,0f000h jz zero mov ax,-1 jmp done zero: mov ax,0 done: ret (4)
42、; lea bx,buffer1 lea dx,buffer2 mov cx,8 ;8個(gè)字節(jié) xor si,si
43、60; ;si=0 clc ;CF=0 (5) mov ax,0b800h
44、; mov ds,ax ;段地址 xor si,si ;地址偏移量si=0 xor dx,dx ;和的高字dx=0 mov cx,99
45、; ;加的次數(shù) mov ax,si ;第一個(gè)數(shù) again: inc si ;指向下一個(gè)字單元 inc si add ax,si
46、160; ;加下一個(gè)數(shù) jnc noc ;無(wú)進(jìn)位轉(zhuǎn) inc dx ;有進(jìn)位dx=dx+1 noc: dec cx
47、; ;次數(shù)-1 jnz cx,again ;非0繼續(xù)加 ret (6) mov si,offset string mov cx,8000h
48、160; ;32k=215=8000h again: cmp si,$ jnz next mov si,20h ;if si=$ si<-
49、;next: inc si loop again (7) xor si,si ;si<-0 mov cx,100
50、; ;循環(huán)次數(shù) again: dec arraysi dec cx jnz again (8) xor si,si ;si<-0
51、160; coun: cmp stringsi,$ je done inc si jmp coun done: ret
52、60; 2.27; (1)使CF0 : clc ; and ax,ax ;or ax,ax
53、 (2)使AX0 : xor ax,ax ; and ax,0 ;mov ax,0 (3)同時(shí)使AX0和CF0: and ax,0 ;xor ax,ax ;sub ax,ax2.29; 壓縮BCD碼加法:AXAXBX 出口參數(shù):AXBCD碼和2.24; okmsg db OK, $errmsg db Error !
54、 Overflow !, $ mov ax,X sub ax,Y jo overflow mov dx,offset okmsg jmp next overflow: m
55、ov dx,errmsg next: mov ah,9 int 21h 錯(cuò)誤: mov ax,X sub ax,Y jo overflow mov dx,offset okmsg
56、160; okmsg db OK, $ mov dx,errmsg ;錯(cuò)誤1:數(shù)據(jù)定義在代碼中 mov ah,9 i
57、nt 21h overflow: errmsg db Error ! Overflow !, $ mov dx,errmsg ; 錯(cuò)誤2:缺少JMP指令 mov ah,9 int 21h
58、2.37; ;xt237.asm.model small.stack.dataarray db 255db 0array1 db 255 dup('$')array2 db 0dh,0ah,'$' .code.startupmov ah,0ah ; 鍵盤輸入字符串mov dx,offset arrayint 21hmov dx,offset array2 ; 回車換行mov ah,09hint 21hmov bx,offset array1again: mov al,bxcmp al,'$'jz donecmp
59、 al,'a' ; 小于a和大于z的字符不是小寫字母jb nextcmp al,'z'ja nextsub al,20h ; 在a和z之間的字符才是小寫字母,轉(zhuǎn)換為大寫mov bx,al ; 保存到原位置next: inc bxjmp againdone: mov dx,offset array1mov ah,09hint 21h.exit 0end第三章(01) 3.1; 硬指令:每個(gè)硬指令就是一個(gè)處理器指令,在CPU執(zhí)行時(shí)產(chǎn)生相應(yīng)功能; 偽指令:偽指令
60、并不產(chǎn)生處理器指令,它通常用于輔助匯編程序?qū)υ闯绦蜻M(jìn)行匯編。3.2;3.5; 編輯 文本編輯程序 匯編語(yǔ)言源程序.asm 匯編 匯編程序 目標(biāo)模塊文件.obj 連接
61、連接程序 可執(zhí)行文件.exe或.com 調(diào)試 調(diào)試程序 應(yīng)用程序3.6; ;xt236.asm 簡(jiǎn)化段定義格式 .model small ;定義程序的存儲(chǔ)模式(小
62、模式) .stack ;定義堆棧段(默認(rèn)1024個(gè)字節(jié)) .data ;定義數(shù)據(jù)段 str1 ab Input Number:09 : ,0dh,0ah,$ str2
63、160; ab Error!,0dh,0ah,$ .cade ;定義代碼段 .startup ;說(shuō)明程序的起始點(diǎn),建立ds,ss的內(nèi)容。
64、 mov ah,09h ;顯示str1字符串 mov dx,offset str1 int 21h gtekey: mov ah,1
65、; ;調(diào)用BIOS判斷按鍵功能 int 16h jz getkey ;如 zf = 0,無(wú)鍵按下,等待
66、160; cmp al,0 ;有鍵按下,鍵值與0比較 jb error ;如 < 0,出錯(cuò)處理 cmp al, 9
67、; ;有鍵按下,鍵值與 9比較 ja error ;如 9,出錯(cuò)處理 mov ah,02h ;調(diào)用DOS顯示字符功能,顯示該數(shù)字
68、160; mov dl,al int 21h .exit 0 ;終止程序執(zhí)行,返回DOS error: mov ah,09h
69、60; ; 出錯(cuò),調(diào)用DOS 功能顯示str2字符串 mov dx,offset str2 int 21h jmp getkey ;等待按鍵
70、 end ; 匯編結(jié)束3.7; ;xt307.asmstack segment dw 512 dup(?) stack endsdata segmentarray db 255db
71、 0array1 db 255 dup('$')array2 db 0dh,0ah,'$' data endscode segment 'code'assume cs:code, ds:data, ss:stackstart: mov ax,data mov ds,ax mov ah,0ah ; 鍵盤輸入字符串mov dx,offset arrayint 21hmov dx,offset array2 ;
72、 回車換行mov ah,09hint 21hmov bx,offset array1again: mov al,bxcmp al,'$'jz donecmp al,'a' ; 小于a和大于z的字符不是小寫字母jb nextcmp al,'z'ja nextsub al,20h ; 在a和z之間的字符才是小寫字母,轉(zhuǎn)換為大寫mov bx,al ; 保存到原位置next: inc bxjmp againdone: mov dx,offset a
73、rray1mov ah,09hint 21hmov ax,4c00hint 21hcode endsend start3.9; (1) mov byte ptr bx,1000 ;1000超出了一個(gè)字節(jié)范圍 (2) mov bx,offset mywordsi;寄存器的值只有程序執(zhí)行時(shí)才能確定, ;而offset是匯編過(guò)程計(jì)算偏移地址,故無(wú)法確定 ;可以改為lea bx,mywordsi (3) cmp mybyte1,mybyt
74、e2 ;兩個(gè)都是存儲(chǔ)單元,指令不允許 (4) mov al,mybyte1+mybyte2 ;變量值只有執(zhí)行時(shí)才確定,匯編過(guò)程不能計(jì)算 (5) sub al,myword ;字節(jié)量AL與字量myword,類型不匹配 (6) jnz myword ;Jcc指令只有相對(duì)尋址方式,不支持
75、間接尋址方式3.10; 前者為“與”操作硬指令助記符,可匯編成機(jī)器代碼。 后者為邏輯運(yùn)算符,在匯編時(shí)進(jìn)行“與”運(yùn)算,產(chǎn)生具體數(shù)值。3.11; 注:對(duì)于邏輯運(yùn)算,有關(guān)操作數(shù)可化為二進(jìn)制數(shù)。 (1)mov al,23h AND 45h OR 67h ; 67h (2)mov ax,1234h/16 + 1Oh ; 13
76、3h (3)mov ax,NOT(65535 XOR 1234h) ; 1234h (4)mov al, LOW 1234h OR HIGH 5678h ; 76h (5)mov ax,23h SHL 4 ; 0234h
77、(6)mov ax, 1234h SHR 6 ; 0048h (7)mov al,a AND (NOT(a-A) ; 41h (8)mov al,H OR 00100000b ; 68h (9)mov ax,(76543 LT 32768) XOR 7654h
78、0; ; 7654h3.12; 假設(shè)block開始的數(shù)據(jù)塊有32個(gè)字節(jié)數(shù)據(jù):16個(gè)正數(shù)+100 (64h),16個(gè)負(fù)數(shù) -48 (0doh) 分別連續(xù)分布: block db 16 dup(100),16 dup(-48) ;也可以是任意字節(jié)數(shù)據(jù),隨意分布。 dplus db 32 dup(?)
79、60; ;為正數(shù)預(yù)留存儲(chǔ)空間 dminus db 32 dup(?) ;為負(fù)數(shù)預(yù)留存儲(chǔ)空間 count equ 32
80、0; ;字節(jié)數(shù)3.15; mydataseg segment my1b db Personal Computer my2b db 20 my3b &
81、#160; db 14h ;20h my4b db 00010100b my5w dw 20 dup(?) my6c equ 100 ;my6c = 100 my7c equ <Personal Compute
82、r> mydataseg ends3.18; 段地址:表示標(biāo)號(hào)所在代碼段的段地址; 偏移地址:表示標(biāo)號(hào)所在代碼段的段內(nèi)偏移地址; 類型:引用該標(biāo)號(hào)時(shí),表示它所在同一個(gè)段near類型,還是另外一個(gè)段far類型。3.19; mydata segment ORG lO0h VARW DW l234H,5678H VARB DB 3,4 AGLIN 4 V
83、ARD DD 12345678H EVEN BUFF DB 10 DUP(?) MESS DB HELLO MOV AX, OFFSET VARB + OFFSET MESS ;AX = 4+16H = 1AH MOV AX, TYFE TYPE BUFF+TYPE MESS+TYPE VARD;AX = 1+1+4 = 06H
84、MOV AX,SIZE VARW+SIZE BUFF+SIZE MESS;AX = 4+10+5 = 19 = 13H MOV AX,LENGTH VARW + LENGTH VARD ;AX = 2+1 = 03H MOV AX,LENGTH BUFF + SIZE VARW ;AX = 10+4 =14 = 0EH MOV AX,TYPE BIGIN &
85、#160; ;AX = FF02H (近) MOV AX,OFFSET BEGIN ;AX = 1BH 3.22; 段定義偽指令
86、0; 段名 定位 組合 類別 組名 .CODE _TEXT WORD PUBLIC CODE .DATA
87、160; _DATA WORD PUBLIC DATA DGROUP .STACK STACK PARA STACK STACK DGROUP 3
88、.25; .model small .stack .data num equ 5 datalist dw -1,0,2,5,4,? .code .startup mov bx,offset datalist mov cx,num
89、; xor ax,ax again: add ax,bx inc bx inc bx loop again mov bx,ax .exit 0 end3.26; stack
90、0; segment para stack dw 512 dup(?) stack ends data segment dword array db 100 dup(?) data ends code
91、60; segment code assume cs:code,ds:data,es:data,ss:stack org 100h start: mov ax,data mov ds,ax mov es,ax mov di,offset array mov al,64h
92、 mov cx,100 cld rep stosb mov ax,4c00h int 21h code ends end start3.27;解答;xt327.asm&
93、#160; .model small .stack 256 ;定義堆棧段大小為256個(gè)字節(jié) .data anum dd 11223344h
94、160; ;定義兩個(gè)雙字的數(shù)(隨意) bnum dd 77553311h sum dd ? ;定義結(jié)果,執(zhí)行后為:88776655h .code
95、 .startup xor si, si ;相對(duì)于變量的位移量清零 mov cx, 2 ;分高低字分別相加,共兩次
96、160; clc ;清零cf again:mov ax, anumsi ;取第一個(gè)數(shù)的一個(gè)字(先低字后高字) adc ax, bnumsi ;取第二個(gè)數(shù)的一個(gè)字(先低字后高字)
97、60; mov sumsi, ax ;存和的一個(gè)字(先低字后高字) inc si ;修改位移量指向下一個(gè)字(加2) inc si loop a
98、gain ;cx=cx-1 ,if cx<>0 ,jump again .exit 0 end 3.28; .startup xor si, si
99、60; ;位移量清零 mov al, bdatasi ;取第一個(gè)數(shù) mov cx, num-1 ;累加次數(shù) again: inc
100、60; si ;指向下一個(gè)數(shù) adc al, bdatasi ;累加 loop
101、60; again ;如未完,繼續(xù)累加 mov sum, al ;完了,存結(jié)果 .exit 0
102、 end4.3; 思路:設(shè)這四組從低位到高位分別放在AL、BL、CL和DL寄存器中。這里僅列出代碼段: mov bl, al ;將al中的兩組分開 and al, 0fh
103、0; ;屏蔽高四位后送al mov cl, 4 ;原al中的數(shù)據(jù)邏輯右移4次送bl shr bl, cl mov dl, ah
104、160; ;將ah中的兩組分開 and dl, 0f0h ;屏蔽低高四位后送dl mov cl, 4 ;原ah中的數(shù)據(jù)邏輯右移4次送dl
105、0; shr dl, cl mov cl, ah ;屏蔽高四位后送cl and cl, 0fh4.4; getkey: mov ah, 1 ;從鍵盤輸入,出口:al存鍵值
106、0; int 21h cmp al, a ;判鍵值是小寫字母? jb getkay
107、; cmp al, z ja getkay sub al,20h ;是小寫字母轉(zhuǎn)換為大寫字母
108、 mov ah, 09h ;顯示 int 21h4.8; (1) 將jmp tablebx指令改為:mov dx, tablebx (2) 去掉源程序中:.exit 0-end之間的語(yǔ)句4.17; .model small .stack 256 .d
109、ata stri1 db please input number:1-9,odh,oah,$ .code .startup again: mov dx,offset stri1 ;顯示stri1,提示輸入 mov ah,09h int
110、21h mov ah,01h ;調(diào)用輸入一個(gè)字符 int 21h ;輸入一個(gè)字符存在
111、al中 cmp al, 1 ;判該字符,如不在1-9 jb again ;重新輸入
112、 cmp al, 9 ja again and al,0fh ;在1-9,屏蔽高4位 mov cx, al
113、; ;振鈴次數(shù)送cx .repeat mov dl, 07h ;調(diào)用一次振鈴 mov ah, 02h
114、160; int 21h mov dx ,0ffffh ;延時(shí) abc: dec dx jnz abc .untilcxz
115、60; ;cx=cx-1,cx=0 退出 .exit 0 end4.22;crazy PROC ;crazy PROC push ax
116、0; ; xor ax,ax ; xor ax,ax xor dx,dx ; xor dx,dx a
117、gain: add ax,bx ;again: add ax,bx adc dx,0 ; adc dx,0 inc bx
118、 ; inc bx inc bx ; inc bx loop again ;
119、; loop again ret ; ret ENDP crazy ; crazy ENDP425;子程序中又調(diào)用子程序就形成子程序嵌套。 子程序中直接或間接調(diào)用該子程
120、序本身就形成子程序遞歸。426; .model small .stack 256 .data stdng db HeLLO eveRyboDy ! , 0 .code
121、; .startup mov bx, offset atring again: mov al, bx call chan ;調(diào)用過(guò)程 mov bx , al next
122、: inc bx jmp again done: .exit 0 chan proc ;大寫轉(zhuǎn)換為小寫字母的過(guò)程 or al, al&
123、#160; jz done cmp al,A jb next cmp al, Z ja next
124、160; or al, 20h ret chan endp end 427;astob proc and dh, 0fh ;十位數(shù)的ASCII碼轉(zhuǎn)為二進(jìn)制數(shù)
125、60; mov al, dh mul 10 ;al= 10*dh and dl, 0fh ;個(gè)位數(shù)的ASCII碼轉(zhuǎn)為二進(jìn)制數(shù)
126、60; add al, dl ;al= 10*dh + dl ret astob endp51; cmp X, 5 je abc jmp done ab
127、c: cmp ax, bx jne cde jmp done cde: inc ax done:.52;cmp X, 5 je abc jmp do
128、ne cmp ax, bx jne abc jmp done abc: inc ax done: .54;宏定義采用一對(duì)偽指令實(shí)現(xiàn),格式如下(其中方括號(hào)表示可選): 宏名
129、160; macro 形參表 宏定義體 endm 宏調(diào)用時(shí),利用宏名帶上實(shí)參即可,格式如下: 宏名 實(shí)參表56;宏的參數(shù)功能非常強(qiáng)大,即可以沒(méi)有參數(shù),也可以帶有一個(gè)或多個(gè)參數(shù);而且參數(shù)的形式非常靈活,可以是常量、變量、存儲(chǔ)單元、指令或它們的一部分,還可以是表達(dá)式等。 宏展開時(shí)的形參與實(shí)參結(jié)合是用位置匹配的實(shí)參對(duì)形參進(jìn)行取代。實(shí)參個(gè)數(shù)
130、與形參個(gè)數(shù)不同時(shí),多余的實(shí)參沒(méi)有作用,缺少的實(shí)參則用空格代替。取代時(shí),不進(jìn)行有效性等檢查。57;宏匯編的特點(diǎn)是在匯編階段進(jìn)行語(yǔ)句展開,無(wú)需返回,不減少目標(biāo)程序代碼,執(zhí)行速度沒(méi)有改變;通過(guò)形參、實(shí)參結(jié)合傳遞參數(shù)。宏匯編適合于程序段較短或要求執(zhí)行速度快的場(chǎng)合。 子程序在執(zhí)行階段需要由主程序執(zhí)行調(diào)用指令CALL進(jìn)行調(diào)用,進(jìn)而轉(zhuǎn)入子程序執(zhí)行,子程序執(zhí)行結(jié)束執(zhí)行返回指令RET返回主程序。子程序如果被多次使用,則會(huì)減少目標(biāo)程序代碼;主程序與子程序之間主要采用寄存器、存儲(chǔ)單元、堆棧等傳遞參數(shù)。子程序適合于程序段較長(zhǎng)或?yàn)闇p少目標(biāo)代碼的場(chǎng)合。59;shrot word ptr
131、 bx,4,ror 1 push cx 1 mov cl,4 1 ror word ptr bx,cl 1 pop cx5.10;logical macro lcode,dopd,sopd lcode dopd,sopd
132、160; endm 例如,如果使用“and ax,bx”指令,可以利用該宏定義,寫出宏指令如下: logical and,ax,bx 初看起來(lái),這個(gè)問(wèn)題似乎比較難解決。實(shí)際上,這4條邏輯指令都具有相同的指令操作數(shù)格式,所以可以歸納為如上宏定義。5.12; move MACRO doprnd,soprnd push ax
133、; mov ax,soprnd mov doprnd,ax pop ax ENDM &
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋁合金材料施工方案
- (三模)榆林市2025屆高三第三次模擬檢測(cè)生物試卷(含答案詳解)
- 數(shù)控加工工藝與編程技術(shù)基礎(chǔ) 教案 模塊一 任務(wù)4 數(shù)控加工機(jī)床夾具基礎(chǔ)
- 結(jié)合農(nóng)業(yè)植保技術(shù)的現(xiàn)代農(nóng)業(yè)病蟲害防治思路與具體辦法探討
- 醫(yī)療機(jī)構(gòu)水污染物排放的管理制度與組織架構(gòu)
- 石油化工靜電接地系統(tǒng)的組成與功能
- 綠色發(fā)展與可持續(xù)城鎮(zhèn)化策略
- 積極穩(wěn)妥推進(jìn)碳達(dá)峰碳中和的策略及實(shí)施路徑
- 采購(gòu)鐵皮保溫施工方案
- 2018年數(shù)學(xué)(北師大版選修2-2)練習(xí)第3章22最大值最小值問(wèn)題活頁(yè)作業(yè)14
- 水產(chǎn)生物遺傳育種學(xué)課件
- 婦產(chǎn)科醫(yī)患溝通護(hù)理課件
- 第3課《萬(wàn)物共存》課件
- 精致的八寶飯
- GB/T 43602-2023物理氣相沉積多層硬質(zhì)涂層的成分、結(jié)構(gòu)及性能評(píng)價(jià)
- 醫(yī)院預(yù)算執(zhí)行情況分析報(bào)告
- 生活老師培訓(xùn)資料課件
- 年終存貨盤點(diǎn)管理制度
- 智能化弱電工程維保方案全套
- 三對(duì)三籃球賽記錄表
- 教科版科學(xué)五年級(jí)下冊(cè)第一單元《生物與環(huán)境》測(cè)試卷含完整答案(奪冠系列)
評(píng)論
0/150
提交評(píng)論