(5) mov al,300 兩運算元型別不匹配
(6) mov [sp],ax 目的運算元應為[ si ]
(7) mov ax,bx+di 源運算元應為 [bx+di]
(8) mov 20h,ah 立即數不能作目的運算元
〔習題2.8〕請分別用一條組合語言指令完成如下功能:
(1)把bx暫存器和dx暫存器的內容相加,結果存入dx暫存器。
(2)用暫存器bx和si的基址變址定址方式把儲存器的乙個位元組與al暫存器的內容相加,並把結果送到al中。
(3)用bx和位移量0b2h的暫存器相對定址方式把儲存器中的乙個字和cx暫存器的內容相加,並把結果送回儲存器中。
(4)用位移量為0520h的直接定址方式把儲存器中的乙個字與數3412h相加,並把結果送回該儲存單元中。
(5)把數0a0h與al暫存器的內容相加,並把結果送回al中。
(1)add dx,bx
(2)add al,byte ptr [bx+si]
(3)add [bx+0b2h],cx
(4)add word ptr [0520h],3412h
(5)add al,0a0h
〔習題2.10〕指出下列指令的錯誤:
(1) xchg [si],30h xchg的運算元不能是立即數
(2) pop cs 不應對cs直接賦值
(3) sub [si],[di] 兩個運算元不能都是儲存單元
(4) push ah 堆疊的運算元不能是位元組變數
(5) adc ax,ds adc的運算元不能是段暫存器
(6) add [si],80h 沒有確定是位元組還是字操作
(7) shl [si] ,1 沒有指定指向資料的大小
(8) ror dx, al al應該換成cl
〔習題2.22〕假設ax和si存放的是有符號數,dx和di存放的是無符號數,請用比較指令和條件轉移指令實現以下判斷:
(1)若dx > di,轉到above執行
cmp dx,di
ja above ;=jnbe above
(2)若ax > si,轉到greater執行
cmp ax,si
jg greater ;=jnle greater
(3)若cx = 0,轉到zero執行
cmp cx,0
jz zero ;= jcxz zero
〔習題2.25〕對下面要求,分別給出3種方法,每種方法只用一條指令。
(1)使cf=0 (2)使ax=0
(1)解答:
clc(清零)
and ax,ax(邏輯操作不會進製)
or ax,ax
(2)解答:
xor ax,ax
and ax,0
mov ax,0
〔習題3.7〕假設myword是乙個字變數,mybyte1和mybyte2是兩個位元組變數,指出下列語句中的錯誤原因。
(1) mov byte ptr [bx],1000 1000超出了乙個位元組範圍
(2) mov bx,offset myword[si] 暫存器的值只有程式執行時才能確定,而offset是彙編過程計算的偏移位址,故無法確定,改為lea bx,myword[si]
(3) cmp mybyte1,mybyte2 兩個都是儲存單元,指令不允許
(4) mov al,mybyte1+mybyte2 變數值只有執行時才確定,彙編過程不能計算
(5) sub al,myword位元組量al與字變數myword,型別不匹配
(6) jnz mywordjnz指令只有相對定址方式,不支援間接定址方式
〔〔習題3.10〕畫圖說明下列語句分配的儲存空間及初始化的資料值:
(1) byte_var db 』abc』,10,10h,』ef』,3 dup(-1,?,3 dup(4))
(2) word_var dw 10h,-5,』ef』,3 dup(?)
(1)從低位址開始,依次是(十六進製制表達):
41 42 43 0a 10 45 46 ff - 04 04 04 ff - 04 04 04 ff - 04 04 04
(2)從低位址開始,依次是(十六進製制表達):
10 00 fb ff 46 45
〔習題3.11〕請設定乙個資料段mydataseg,按照如下要求定義變數:
(1) my1b為字串變數:personal computer
(2) my2b為用十進位制數表示的位元組變數:20
(4) my4b為用二進位制數表示的位元組變數:20
(5) my5w為20個未賦值的字變數
(6) my6c為100的常量
(7) my7c表示字串:personal computer
mydataseg segment
my1b db 『personal computer』
my2b db 20
my3b db 14h ;20h
my4b db 00010100b
my5w dw 20 dup(?)
my6c equ 100 ;my6c = 100
my7c equ
mydataseg ends
第4章基本組合語言程式設計
〔習題4.6〕編制乙個程式,把變數bufx和bufy中較大者存入bufz;若兩者相等,則把其中之一存入bufz中。假設變數存放的是8位無符號數。
.model small
.stack 256
.data
bufx db ?
bufy db ?
bufz db ?
.code
.startup
mov al, bufx
mov bl, bufy
cmp al,bl
ja next
mov bufz, bl
jmp done
next: mov bufz, al
done: .exit 0
end1.顯示helloworld字串。
程式實現任意鍵後響鈴
3.設有乙個64位的資料,要求將它算術左移8位(從高位元組開始,從右向左左移8位)
4.計算1~100的和,將結果放入sum中
5.把乙個字串中所有的大小改小寫,該字串以』0』結尾。
6.編制乙個程式,把變數bufx和bufy中較大者存入bufz;若兩者相等。則將其中之一存入bufz。假設變數存放的是8位無符號數。
組合語言指令大全發布完整版
les 傳送目標指標,把指標內容裝入es.例 les di,string 把段位址 偏移位址存到es di.lfs 傳送目標指標,把指標內容裝入fs.例 lfs di,string 把段位址 偏移位址存到fs di.lgs 傳送目標指標,把指標內容裝入gs.例 lgs di,string 把段位址 ...
特種結構期末複習 完整版
1 緒論 1.特種結構是指除普通的工業與民用建築結構 交通土建工程 礦山 碼頭和水利水電工程結構研究物件以外的,在土木工程中有廣泛用途的 功能比較特殊的 且結構的作用以及結構的形式比較複雜的工程結構。2.特種結構的研究物件 擋土牆及護坡 深基坑支護結構 貯液池 水塔 筒倉和煙囪。3.學習方法 簡答 ...
組合語言總結
一 乙個完整的源程式的結構 乙個源程式一般由若干個段組成,每個分段可以是棧段 資料段和 段。乙個源程式可以有多個棧段 資料段和 段,從語法規則上來看,棧段是有明顯標誌的 段最好的型別為 code 的標記,並用cs作為段界暫存器,只有資料段不要求標誌。完整的源程式的結構一般形式如下 程式名稱 二 源程...