一.單項選擇題
1.段暫存器( b )給定了當前可使用附加資料段的段首址。
a.ds b.esc.ssd.cs
2.在語句"mov ax,5[bx+si]"中, 源操作採用的是( d )定址方式。
a. 直接 b. 暫存器間接 c. 變址 d. 基址加變址
3.sbb指令的功能為( b )。
a. (opd)-(ops)→opd b. (opd)-(ops)-cf→opd
c. (ops)-cf→opdd. (opd)-cf→opd
4.若有符號數運算結果溢位,則( a )位置1。
a.of b.cfc.zf d.sf
5.使用串操作指令時,目的串一定要放在當前( c )中。
a.**段 b.資料段 c.附加資料段 d.堆疊段
二.填空題
1、 loop指令的轉移範圍是 0-255個位元組 。
2、 如果end偽指令後面帶有符號位址,這個符號位址即為該程式執行時的啟動位址 。
3、 如果在當前堆疊段中用si作指標,則應該用 ss: 進行說明
4、 在使用out指令時,如外設埠位址大於255,則應先把該位址送入 dx 暫存器中。
5、已知(ax)、(bx)均為無符號數,在「cmp ax,bx」之後使用轉移指令jbe l _可使(ax)(bx)時轉l處執行
三.改錯題
1.sal ax,2sal ax,1
2. lea point,buflea si,buf
3.idiv ax,10mov bx,10
idiv bx
blpop bx
5.add [bx],[siadd bx,[si]
6. cwd ax,dxcwd
7.mov dx,5[si+dimov dx,5[bx+di]
8. out dx,『amov al,『a』
out dx,al
9.stack segment para public 『stack ;定義堆疊段
stack segment para stack 『stack』
10.test ax,01h ;測試ax最高位 test ax,8000h
11.dec [di] dec [di]
dec word ptr [di]
12.cwd ax, dx cwd ax, dx
cwd13.out dl, 『$』 out dl, 『$』
mov al, 『$』
out dx,al
14. mov si,al mov si,al
mov si,ax
15. mov cx, [bx+bp] mov cx, [bx+bp]
mov cx, [bx+si
16. mov ds, datamov ds, data
mov ax, data
17. shl ax,3shl ax,3
shl ax,cl
18. and ax,[cx] and ax,[cx]
and ax,[bx]
19. 執行dos10號功能呼叫往buf緩衝區輸入字串後,輸入串首址應在buf+1中。
buf+2
20. 若無符號數相加結果溢位,則of位置1。
cf四.簡答題
1.簡述巨集指令與子程式的區別。
答: 定義的方式不一樣;
執行的時間不一樣,子程式是在執行.exe檔案時被執行的,而巨集指令是在彙編期間被執行的;
引數傳遞的方式不同。
2.已知(ax)=0fbadh,執行以下語句序列後,(ax)=?
xchg ah,al
or ax,0ff00h
答:(ax)=0fffbh
3.如何計算待取出指令的實體地址?
答:(ip)左移四位+(cs)
4.已知ax和bx中均為無符號數且需(ax)>(bx)時轉next處執行:
cmp ax,bx
( ) next
可在括號內填入哪幾種轉移指令?
答: ja或jea
5.已知兩數補碼分別為:[x1]補=00010101b, [x2]補=10100110b, 計算[x1]補+[x2]補後, zf和sf各為多少?
答:zf=0, sf=1
6. 已知(dx)=7af8h,執行「or dx,0f0f0h」後(dx)=?
答:0faf8h
7.已知(ss)=2000h,(sp)=1000h,棧頂的實體地址為多少?
答:21000h
8. 如果需要往str緩衝區輸入字串,在下列程式段的空白處應填入什麼指令?
tt macro a,b
lea dx,a
mov ah,b
int 21h
endm
┇str db 80,0,80 dup(0)
┇答:tt str, 10
五.編寫程式段
1. 已知資料段如下:
data segment
data1 dw -7935,12bch,0
data2 db -12,25h
str0 db 『dwcmlwom $cm ┅』
count equ $-str0
data ends
請根據題目要求編寫程式段。
1) data2中的全部資料壓入堆疊中。
2) 算(data1)×(data1+2)+data1→data1+2、data+4中。
3) 請用串操作指令在str0串中查詢字元『w』出現的次數 →dl。
4) 請寫出將str0字串在顯示器上當前游標位置輸出的程式段。
5) 判斷data1中的第15位與第7位是否同時為0,為0轉zero處執行,否則返回dos。
2. 已知d盤masm子目錄下有一存在的檔案wan. asm,編寫開啟該檔案的程式段,開啟成功0→ax,否則,-1→ax,最後返回作業系統。
答f db 『d:\masm\
┇lea dx,f
mov ah,3dh
mov al,2
int 21h
jc err
mov ax,0
jmp ros
err: mov ax,-1
ros: mov ah,4ch
int 21h
3. 已知資料段中有語句「a dw -160,0」,請分別用乘法指令和移位指令實現(a)*16 → a和a+2中(注:不考慮溢位)。
答:① mov ax,a
mov cx,16
imul cx
mov a,ax
mov a+2,dx
② mov cl,4
sal a,cl
4.請寫出分別將ax、bh中的有符號數和cl中的無符號數順序壓入系統堆疊的程式段。
答:push ax
mov al,bh
cbwpush ax
mov ch,0
push cx
七.閱讀程式並回答問題
1.該程式的功能是什麼?
2.請寫出子程式subp的入口引數和出口引數。
3.若在子程式subp中漏寫了「pop bx」,該子程式能正確返回嗎?為什麼?
data segment
outf db 0ah,0dh,0,0,』h』,0ah,0dh,』$』
data ends
rep: mov ah,1
int 21h
cmp al,』0』
jb exit
cmp al,』9』
ja exit
lea si,outf+2
call subp
lea dx,outf
mov ah,9
int 21h
jmp rep
exit: mov ah,4ch
int 21h
subp proc
push bx
mov ah,0
mov bl,16
div bl
add al,30h
mov [si],al
inc si
add ah,30h
mov [si],ah
pop bx
retsubp endp
碼,再等待輸入下一字元;如為其它字元,則轉結束。
2. 入口引數: al:存放從鍵盤輸入的乙個字元
ah:被除數高位
bl:要轉換的進製(除數)
組合語言程式設計
實驗報告 軟體學院 一 實驗目的與意義 理解並熟練掌握組合語言程式設計過程中的編輯 彙編 鏈結和除錯等各個步驟,提高對彙編課程內容的理解和組合語言的掌握,通過上機練習加深對課程內容的理解和掌握。通過組合語言編制的程式上機除錯 執行檢驗程式設計是否正確。熟悉和掌握編輯 彙編 連線和除錯四個實用程式的使...
三組合語言程式設計
軟體要求 win98或win2000 masm5.0或masm6.0 含masm link debug等程式 硬體要求 ibm pc及相容機 實驗一非壓縮bcd碼乘法 一 實驗目的 學習程式設計的基本方法和技能,熟練掌握用組合語言設計 編寫 除錯和執行程式的方法。為後續課程打下堅實的基礎。同時熟練掌...
組合語言程式設計A卷
2011級組合語言程式設計課程試題 a卷 合分人複查人 1 用組合語言書寫的程式叫做masm要求該檔案的副檔名是編寫32位windows應用程式應選擇儲存模型。2 組合語言語句有兩種,分別是和3 除外設資料外的資料定址方式有3類,分別稱為 和定址。4 進行windows應用程式開發時,需要庫檔案,執...