組合語言 實驗3 迴圈和子程式設計

2021-09-23 07:45:42 字數 3024 閱讀 6192

實驗三  迴圈和子程式設計

1、掌握子程式、巨集和中斷程式的設計方法;

2、熟悉在pc機上建立、彙編、連線、除錯和執行8086/8088組合語言程式的過程。

1. 編寫乙個子程式計算z=f(x,y)=x/y+x-y(x,y,z有符號數記憶體字數)。要求通過堆疊傳送輸入引數,輸出引數通過ax傳遞。(要求輸入輸出實現,且有提示)。

.model small

.stack

.data

inputx byte 'insert the x:', 13, 10, '$'

inputy byte 'insert the y:', 13, 10, '$'

output byte 'result is:', 13, 10, '$'

.code

.startup

lea dx, inputx

mov ah, 0ah

int 21h

mov ah, 1

int 21h

and ax, 0fh

push ax

lea dx, inputy

mov ah, 0ah

int 21h

mov ah, 1

int 21h

and ax, 0fh

push ax

call count

mov cx, 4

mov dx, ax

s:mov dx, ax

and ax, 0fh

add al, 48

push cx

mov cl, 4

shr dx, cl

pop cx

mov ah, 9

int 21h

loop s

.exit 0

count proc

push bp

mov bp, sp

push ax

push bx

push cx

push dx

mov bx, [bp+4]

mov ax, [bp+6]

mov cx, ax

cwdidiv bx

add ax, cx

sub ax, bx

pop dx

pop cx

pop bx

pop ax

pop bp

ret 4

count endp

end

2. 編寫乙個巨集,求三個數的最大數,原型為:max3 x,y,z,max,最大值要求輸出。

max3 macro x, y, z, max

push ax

mov ax, x

.if sword ptr ax < y

mov ax, y

.endif

.if sword ptr ax < z

mov ax, z

.endif

mov max, ax

pop ax

endm

.model small

.stack

.data

x dw ?

y dw ?

z dw ?

max dw ?

.code

.startup

max3 x, y, z, max

.exit 0

end

3. 掛接1ch中斷,正計時90秒後退出。要求螢幕顯示0-89的秒數。

.model small

.stack

.data

intno equ 1ch

oldisr word ?, ?

timer byte 100

counter word 0

isdone byte 0

.code

.startup

mov ax, 0

mov es, ax

climov ax, es:[4 * intno]

mov oldisr[0], ax

mov ax, es:[4 * intno + 2]

mov oldisr[2], ax

sticli

mov es:[4 * intno], offset isr

mov es:[4 * intno + 2], seg isr

stiwaithere:

cmp isdone, 1

jnz waithere

climov ax, oldisr[0]

mov es:[intno * 4], ax

mov ax, oldisr[2]

mov es:[intno * 4 + 2], ax

sti.exit 0

isr proc far

push dx

push ax

stiinc timer

again:

cmp timer, 1000 / 55

jb done

mov timer, 0

mov ah, 2

mov dl, 13

int 21h

mov ax, counter

mov dl, 10

div dl

mov dh, ah

mov dl, al

mov ah, 2

add dl, 30h

int 21h

mov dl, dh

add dl, 30h

int 21h

inc counter

cmp counter, 90

jl done

mov isdone, 1

done:

pushf

call dword ptr oldisr

clipop ax

pop dx

iret

isr endp

end

《組合語言》實驗 實驗

注意 db定義位元組型別變數,乙個位元組資料百佔1個位元組單度元,讀完乙個,偏移量加1 dw定義字型別變問量,乙個字資料佔2個位元組單元,讀完乙個,權偏移量加2 dd定義雙字型別變數版,乙個雙字資料佔4個位元組單元,讀完乙個,權偏移量加4 一開始用了乙個暫存器表示所有項,但是後來發現四個資料佔的位元...

組合語言實驗1 2

小寫字母變為大寫字母 data segment notic db please input the word 0ah,0dh data ends code segment assume cs code,ds data start mov ax,data mov ds,ax 填入ds mov cx,1...

組合語言實驗1 3

輸入10個字元,並反序輸出 data segment dd1 db 10 dup data ends code segment assume cs code,ds data start mov ax,data mov ds,ax lea bx,dd1 dd1的有效位址放入bx中 mov cx,0ah...