彙編三 習題

2022-03-12 10:17:32 字數 4223 閱讀 1318

注意:  必須弄懂這個圖,這能良好處理指令序列

常用歸零**:

1:mov ax,0

2:sub

ax,ax

3:xor

ax,ax

4:and ax,00h

1假設暫存器ax儲存的是乙個有符號數,編寫乙個程式實現加下功:

datas segment

x dw 02h

;datas ends

codes segment

assume

cs:codes,ds:

datas

start:

movax,datas

movds,ax

xorax,ax

movax,x

cmp ax,0

jgenext

mov ax,-1

jmpnext2

next:

mov ax,1

next2:

movah,4ch

int21h

codes ends

end start

2: 編制一完整的程式,統計有符號字陣列arrarw中大於5,小於5和等於5的資料個數,並將其分別儲存到字變數max5,min5和equ5中去注意: inc dec 指令不能直接操作 資料段中的運算元正確的程式:

datas segment

arrarw dw '1

','2

','5

','6

','8

'max5 dw ?

; min5 dw ?;

equ5 dw ?;

len dw $-arrarw;

datas ends

codes segment

assume

cs:codes,ds:

datas

start:

movax,datas

movds,ax

xor ax,ax ;

儲存min5

xor bx,bx ;

儲存max5

xor dx,dx ;

儲存equ5

mov cx,5

;mov si,0

next:

cmp arrarw[si],'5'

jgelarge5

inc ax ;

小於5jmp

next2

large5:

cmp arrarw[si],'5'

jeequ5s

inc dx ;

大於5jmp

next2

equ5s:

inc bx ;

等於5next2:

incsi

cmpsi,len

jgenext3

loop next

next3:

add ax,30h ;

dw進行對齊

add bx,30h ;

add dx,30h ;

mov min5,ax;

1mov max5,dx;

2mov equ5,bx;

2mov

ah,4ch

int21h

codes ends

end start

原來錯誤的程式:為什麼顯示不出來 因為dw中的是自變數需要手動加30h, 改正後正常顯示正常

datas segment

arrarw dw '1

','2

','5

','6

','8

'max5 dw ?

; min5 dw ?;

equ5 dw ?;

len dw $-arrarw;

datas ends

codes segment

assume

cs:codes,ds:

datas

start:

movax,datas

movds,ax

xor ax,ax ;

儲存min5

xor bx,bx ;

儲存max5

xor dx,dx ;

儲存equ5

mov cx,5

;mov si,0

next:

cmp arrarw[si],'5'

jgelarge5

inc ax ;

小於5jmp

next2

large5:

cmp arrarw[si],'5'

jeequ5s

inc dx ;

大於5jmp

next2

equ5s:

inc bx ;

等於5next2:

incsi

cmpsi,len

jgenext3

loop next

next3:

movword ptr min5,ax;這裡看不到值 有疑問

movword ptr max5,dx

movword ptr equ5,bx

movah,4ch

int21h

codes ends

end start

3: 編制求bx暫存器中的資訊含有多少個二進位制位"1"的程式正確程式:

datas segment

x db

'123411

'len equ $-x

datas ends

codes segment

assume

cs:codes,ds:

datas

start:

movax,datas

movds,ax

movax,0h

movbx,0h

mov cx,6

;next:

cmpx[bx],31h

jnenext2

inc ax ;

表示1的個數

錯誤程式如下(自己寫的有不想刪除,當做教訓):

datas segment

x db

1,2,3,4,1,1

len equ $-x

datas ends

codes segment

assume

cs:codes,ds:

datas

start:

movax,datas

movds,ax

xorax,ax

xorbx,bx

leabx,x

movcx,len

next:

shl bl,1

jncnext2

incal

next2:

loop next

movah,4ch

int21h

codes ends

end start

彙編 習題1

糾錯 sp 2040h ax 12d4h bx 36f4h 讓al置0的方法 mov al,0 xor al,al 最快,不用操作記憶體 and al,00h sub al,al 兩種方法實現將 al 乘以10值送ax的功能 mov ax,0028h mov cl,10 mul cl cbwshl ...

彙編 5章習題

1 定義 標號 機器指令存放位置的識別符號,即機器指令存放位址的符號表示,它可以作為轉移指令或者重複控制指令轉向目的運算元。eg loop1.一般只在 段中定義和引用。三個屬性 段屬性,偏移屬性,型別屬性 near,far 2 size 的特點 書上說是變數後的所有位元組數,事實上masm6中只是第...

movsw 彙編 彙編練習題

16.下面指令執行後,總是使cf of 0的是 a.and b.neg c.not d.inc 17.為使cx 1時,執行 jz minus 轉至標號minus而編制了一指令,其中錯誤的是 a.inc cx b.sub cx,offffh c.and cx,offffh d.xor cx,offff...