實驗三 迴圈和子程式設計
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...