微機課設,用組合語言編寫程式,謝謝了

時間 2021-05-04 15:01:36

1樓:匿名使用者

ioy0 equ 0d400h ;片選ioy0埠始位址

ioy1 equ 0d440h ;片選ioy1埠始位址

ioy2 equ 0d480h ;片選ioy2埠始位址

ioy3 equ 0d4c0h ;片選ioy3埠始位址

;********************************************

adc0809 equ ioy0+00h ;adc0809埠位址

pa55 equ ioy1+00h ;8255的a口位址

pb55 equ ioy1+04h ;8255的b口位址

pc55 equ ioy1+08h ;8255的c口位址

pctl equ ioy1+0ch ;8255的控制暫存器位址

dac0832 equ ioy2+00h ;dac0832埠位址

timer0 equ ioy3+00h ;8254計數器0埠位址

timer1 equ ioy3+04h ;8254計數器1埠位址

timer2 equ ioy3+08h ;8254計數器2埠位址

tctl equ ioy3+0ch ;8254控制暫存器埠位址

stack1 segment stack

dw 256 dup(?)

stack1 ends

data segment

str1 db 'please input password:',0ah,0dh,'$'

str2 db 'the password is not right !!!please try again!!!',0ah,0dh,'$'

str3 db 'welcome to the signal creat machine',0ah,0dh,'loading adc0809.....',0ah,0dh,'$'

str4 db 'the passward is right',0ah,0dh,'$'

dtable db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,39h,5eh,79h,71h ;7段數碼管的段位值

stable db 80h,8ch,98h,0a5h,0b0h,0bch,0c7h,0d1h,0dah,0e2h,0eah,0f0h,0f6h,0fah,0fdh,0ffh,0ffh,0fdh,0fah,0f6h,0f0h,0eah,0e2h,0dah,0d1h,0c7h,0bch,0b0h,0a5h,98h,8ch,80h,7fh,73h,67h,5ah,4fh,43h,38h,2eh,25h,1dh,15h,0fh,09h,05h,02h,00h,00h,02h,05h,09h,0fh,15h,1dh,25h,2eh,38h,43h,4fh,5ah,67h,73h,7fh

password db 41h,42h,43h,44h ;預設密碼

gao db 1 dup (?) ;預留顯示十位

diw db 1 dup (?) ;預留顯示個位

pw db 4 dup (?) ;密碼預留

yu db 20 dup (?) ;預留20個空間存放資料

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

call clk ;adc0809 clk輸入

mov dx,pctl ;初始化8255工作方式

mov al,88h ;1000 1000方式0,a口,b口輸出,c口高四位輸入

out dx,al ;

l0: call dis

mov dx,offset str1 ;顯示提示資訊

mov ah,9

int 21h

call dis

;*******識別密碼***********

l1: mov cx,4

mov si,offset pw

l: mov ah,01h ;輸入密碼

int 21h

mov [si],al

inc si

cmp al,45h ;檢測有無e

jz e

loop l

mov cx,4

mov si,offset password;取password的偏移位址

mov di,offset pw

te: mov al,[di]

cmp al,[si]

jne te1

inc di

inc si

loop te

jmp q

te1: mov dx,offset str2 ;顯示密碼錯誤

mov ah,9d

int 21h

jmp l0

e: jmp quit

;*****啟動adc0809的ino***********

q: mov dx,offset str4

mov ah,09h

int 21h

mov dx, offset str3 ;顯示提示資訊

mov ah,09h

int 21h

; mov ah,00h ;將ah清零用於加法

; mov cx,20d

l2: mov dx,adc0809 ;啟動0809的in0

out dx,al

l3: call dally

;*****讀取eoc的值****************

mov dx,pc55

in al,dx ;讀c口的值

test al,80h ;檢測出c7的值是否為1

jz l3 ;c7不為1則跳到l3

;*****讀取0809in0的值*************

call sin

jmp l0

mov dx,adc0809 ;讀取0809in0的值

in al,dx

; add ah,bl

; loop l2 ;求20次資料的和

; ; mov al,ah

; mov bl,20d

; div bl ;求採集資料20次的平均值(修改)

; mov bh,al

mov bl,al

mov cl,04h

shr al,cl ;取出十位

mov gao,al ;存十位的值

mov al,bl

and al,0fh ;取出個位

mov diw,al ;存個位的值

call dis ;呼叫數碼管顯示函式

call dis

mov al,bl

cmp al,15h

jl l4

mov al,bl

cmp al,80h

jl l5

mov al,bl

cmp al,0a0h

jl l6

mov al,bl

cmp al,0c0h

jl l7

call fang1k

jmp l0

l4: call jieti

jmp l0

l5: call sin

jmp l0

l6: call tixing

jmp l0

l7: call fang500

jmp l0

quit: mov ax,4c00h ;結束程式退出

int 21h

dis proc near ;顯示子函式

push ax

push dx

push bx

mov al,0efh ;選通位led 1110 1111

mov dx,pa55

out dx,al

mov si,offset gao ;取個位位址

mov al,[si] ;取個位數據

mov bx,offset dtable

and ax,00ffh

add bx,ax

mov al,[bx]

mov dx,pb55

out dx,al

mov al,0dfh ;選通個位led 1101 1111

mov dx,pa55

out dx,al

mov si,offset diw ;取個位位址

mov al,[si] ;取個位數據

mov bx,offset dtable

and ax,00ffh

add bx,ax

mov al,[bx]

mov dx,pb55

out dx,al

pop bx

pop dx

pop ax

retdis endp

clk proc near ;方波clk時鐘18.432k子程式

;****初始化8254計數器0工作在方式3,以十進位制計數,初值為100*******

push dx ;保護現場

push ax ;保護現場

mov dx,tctl

mov al,17h ;0001 0111b

out dx,al

mov dx,timer0 ;裝初值100

mov al,100d

out dx,al

pop ax ;恢復現場

pop dx ;恢復現場

retclk endp

fang1k proc near ;方波1khz子程式

;***初始化8254計數器1工作在方式3,以十進位制計數,初值為184******

push dx ;保護現場

push ax ;保護現場

mov dx,tctl

mov al,57h ;0101 0111b

out dx,al

mov dx,timer1

mov al,0b8h;184

out dx,al

f: call dis

mov dl,0ffh ;判斷主鍵盤有無鍵按下

mov ah,6

int 21h

jz f

pop ax ;恢復現場

pop dx ;恢復現場

retfang1k endp

fang500 proc near ;方波500hz子程式

;***初始化8254計數器1工作在方式3,以十進位制計數,初值為368******

push dx ;保護現場

push ax ;保護現場

mov dx,tctl

mov al,77h ;0111 0111b

out dx,al

mov dx,timer1

mov al,70h ;368d分高低位寫入

out dx,al

mov al,01h

out dx,al

f1: call dis

mov dl,0ffh ;判斷主鍵盤有無鍵按下

mov ah,6

int 21h

jz f1

pop ax ;恢復現場

pop dx ;恢復現場

retfang500 endp

jieti proc near ;階梯波子程式

push dx

push ax

j0: mov al,00h;al=0

j1: mov dx,dac0832;al out

out dx,al

add al,33h

call dally1

cmp al,0ffh

jne j1

call dis

mov dl,0ffh ;判斷主鍵盤有無鍵按下

mov ah,6

int 21h

jz j0

pop ax

pop dx

retjieti endp

sin proc near ;正弦波子程式

push ax

push bx

push dx

s0: mov bx,10h

s1: mov si,offset stable

mov cx,64d

s2: mov al,[si]

mov dx,dac0832

out dx,al

inc si

loop s2

jmp s1

dec bx

cmp bx,00h

jne s1

call dis

mov dl,0ffh ;判斷主鍵盤有無鍵按下

mov ah,6

int 21h

jz s0

pop dx

pop bx

pop ax

retsin endp

tixing proc near ;梯形波子程式

push ax

push dx

push bx

t: mov bx,10h

mov al,00h

mov dx,dac0832

out dx,al

t0: mov al,33h

t1: mov dx,dac0832

out dx,al

inc al

cmp al,0ffh

jne t1

call dally1

t2: out dx,al

dec al

cmp al,33h

jne t2

dec bx

cmp bx,00h

jne t0

call dis

mov dl,0ffh ;判斷主鍵盤有無鍵按下

mov ah,6

int 21h

jz t

pop bx

pop dx

pop ax

rettixing endp

;****延時子程式**********************

dally1 proc near

push cx

push ax

mov cx,1000h

d1: mov ax,0100h

d2: dec ax

jnz d2

loop d1

pop ax

pop cx

retdally1 endp

dally proc near

push cx

push ax

mov cx,4000h

d3: mov ax,0600h

d4: dec ax

jnz d4

loop d3

pop ax

pop cx

retdally endp

code ends

end start

用組合語言編寫求數的平均數,用組合語言編寫求三個數的平均數

孟靜渠思雨 data segmentxdw 345y dw234zdw 234m dw897ndw 999 定義五個數rdw 2dup 儲存結果 data ends code segment assume cs code,ds data start movax,data movds,ax movax...

用組合語言編寫延時1S的子程式,用組合語言編寫乙個延時1S的子程式

湯旺河邊 本程式通過編譯,執行正確 code segment assume cs code,ds code subroutine 延時指定的時鐘嘀嗒數 入口 didas 時鐘嘀嗒數 1秒鐘約嘀嗒18.2次,10秒鐘嘀嗒182次。若延時不是秒的10數次倍,誤差稍微大點 delay1s proc nea...

用組合語言編寫簡單程式,用組合語言編寫一個簡單程式

sweet馮 1.計算u x y z 100 w 其中 x,y,z,w均為十六位有符號數。程式如下 data segment x dw 10 16位變數 y dw 20 z dw 30 w dw 40 u dw data ends code segment assume cs code,ds dat...