匯編課程設計
A. 匯編語言電子時鍾的課程設計
;name: ELECTRONIC CLOCK
data segment
mess1 db ' ****************ASM ASSIGNMENT**************** ',0ah,0dh
db ' ',0ah,0dh
db ' ***************ELECTRONIC CLOCK*************** ',0ah,0dh
db ' ',0ah,0dh
db ' ',0ah,0dh
db ' *******Press C or c to correct the time******* ',0ah,0dh
db ' ',0ah,0dh
db ' ***********Press ESC button to exit*********** ',0ah,0dh,'$'
tn db 'Please input the new time (hh:mm:ss):',0dh,0ah,'$'
mess2 db '*******Time is:',0ah,0dh,'$'
t_buff db 40 ;在數據段開一段時間顯示緩沖區
db ?
db 40 p (?)
hor db ?
min db ?
sec db ?
fg db 0
data ends
stack segment
db 100 p(?)
stack ends
code segment
assume cs:code,ss:stack,ds:data ;確定各個邏輯段的類型
start:
call clear ;調用清屏子程序
display: ;時間顯示部分
mov ax,data
mov ds,ax
mov bx,offset t_buff ;送t_buff的偏移地址到BX
mov ah,2ch ;調用DOS時間調用功能,功能號:2cH,小時,分鍾,秒數分別保存在CH,CL,DH中
int 21h
mov al,ch ;小時數設定
mov ah,0
call bctd ;調用進制轉換子程序
push ax
and al,0f0h ;選取al高四位
mov cl,4 ;設置右循環的次數
rol al,cl ;右循環
or al,30h ;加30h得到ACSII碼
mov [bx],al ;將得到的結果送到t_buff緩沖區
inc bx ;BX自加1,指針指向下一個緩沖區的下一個地址
pop ax
and al,0fh ;選取低四位
or al,30h
mov [bx],al ;將轉換後的低四位值送入緩沖區的第二個地址
inc bx
;----------------------------------------------------------
mov al,':' ;顯示分隔符號
mov [bx],al
inc bx
;-------------------------------------------------------
mov ah,2ch
int 21h
mov al,cl ;分鍾數設定
mov ah,0
call bctd
push ax
and al,0f0h
mov cl,4
rol al,cl
or al,30h
mov [bx],al
inc bx
pop ax
and al,0fh
or al,30h
mov [bx],al
inc bx
;-------------------------------------------------------------------------
mov al,':' ;顯示分隔符號
mov [bx],al
inc bx
;-------------------------------------------------------------------------
mov ah,2ch ;秒設定
int 21h
mov al,dh
mov ah,0
call bctd
push ax
and al,0f0h
mov cl,4
rol al,cl
or al,30h
mov [bx],al
inc bx
pop ax
and al,0fh
or al,30h
mov [bx],al
inc bx
;----------------------------------------------------------------------
mov al,'$' ;將字元串的結束位送至顯示緩沖區的最後一位
mov [bx],al
;------------------------------------------------------------------------
push bx ;置游標位置 ,AH=2,BH=0,DH跟DL分別為行號與列號,並入棧保護BX
mov ah,2
mov bh,0
mov dh,17
mov dl,41
int 10h
pop bx
lea dx,t_buff ;送t_buff偏移地址到DX,並調用DOS顯示功能,功能號為9
mov ah,9
int 21h
push bx ;置游標位置
mov ah,2
mov bh,0
mov dh,0
mov dl,0
int 10h
pop bx
lea dx,mess1
mov ah,9
int 21h
push bx ;置游標位置
mov ah,2
mov bh,0
mov dh,17
mov dl,21
int 10h
pop bx
lea dx,mess2
mov ah,9
int 21h
;-----------------------------
call delay1
mov ah,1 ;調用鍵盤I/O中斷功能號1,獲取鍵值到AL
int 16h
cmp al,'c' ;是c鍵,轉到時間修改程序
je Cor
cmp al,'C' ;是C鍵,轉到時間修改程序
je Cor
cmp al,1bh
jz quit ;是ESC鍵,退出程序
jmp display
quit:
mov ah,4ch ;程序終止功能號
int 21h
ret
Cor: call correct ;調用時間修改子程序
;-------------------------------
bctd proc near ;二進制轉BCD碼子程序
;AX輸入參數
;AX輸出參數,存放調整過的BCD碼
mov dx,ax
mov ax,0
mov cx,16 ;設循環次數
bctd1:
clc ;清進位標志C
rcl dx,1 ;通過進位的循環右移
adc al,al ;帶進位加法
daa ;加法的十進制調整
xchg al,ah ;交換高、低八位
adc al,al
daa
xchg al,ah
loop bctd1 ;循環次數保存在CX里
ret
bctd endp
;-------------------------------------------
clear proc near
push ax ;入棧保護現場
push bx
push cx
push dx
mov ax,0600h ;ah=06(滾動)al=00(全屏空白)
mov bh,3eh ;設置背景顏色(2)和前景顏色(e)
sub cx,cx
mov dx,5f5fh
int 10h
pop dx ;出棧恢復現場
pop cx
pop bx
pop ax
ret
clear endp
;-----------------------------------------
delay1 PROC ;精確延遲時間子程序
MOV DX,04ffh ;循環次數
up: XOR CX,CX
a: NOP
LOOP a
DEC DX
JNZ up
RET
delay1 ENDP
;----------------------------
correct proc ;時間修改子程序
call input ;調用鍵盤輸入子程序輸入數據
mov ch,hor
mov cl,min
mov dh,sec
and dl,0h
mov ah,2dh
int 21h
jmp start
ret
correct endp
;----------------------------------
input proc ;鍵盤輸入子程序
push ax ;入棧保護數據
push bx
push cx
push dx
pushf
mov dx,offset tn ;顯示修改時間的格式提示
mov ah,09h
int 21h
mov dx,offset t_buff ;數據緩沖區的數據輸入
mov ah,0ah
int 21h
and dx,0h
lea bx,t_buff
inc bx
inc bx
mov dh,[bx]
sub dh,30h
inc bx
mov dl,[bx]
sub dl,30h
mov cl,10
mov al,dh
mul cl
add al,dl
mov ch,al
mov hor,al
inc bx
inc bx
mov dh,[bx]
sub dh,30h
inc bx
mov dl,[bx]
sub dl,30h
mov cl,10
mov al,dh
mul cl
add al,dl
mov cl,al
mov min,al
inc bx
inc bx
mov dh,[bx]
sub dh,30h
inc bx
mov dl,[bx]
sub dl,30h
mov cl,10
mov al,dh
mul cl
add al,dl
mov dh,al
mov sec,al
popf ;出棧恢復數據
pop dx
pop cx
pop bx
pop ax
ret
input endp
;----------------------------
code ends
end start
B. 求一份 匯編語言 .課程設計報告 簡單點的 不要百度來的
http://blog.163.com/asm_c/blog/static/248203113201742911469746/
參考程序。
C. 求份:匯編課設。。題目中任選1題做,或自擬。再追加分
題目六 商品排序程序設計
data segment
NO_10 db 13,10,'Do you want to input name(y ?)?','$'
NO_11 db 13,10,'Input name:(28)','$'
NO_30 db 13,10,'no enough space',13,10,36
disp db 13,10,'You input name : ','$'
disp2 db 13,10,'Range:','$'
disp3 db 3,3,3,' ','$'
lengthth db 0
NAME0 db 20 p(28 p(' '))
name1 db 29,?
name2 db 29 p('$');存放暫時名字
outputdata db 28 p(0),'$'
data ends
code segment
assume cs:code,ds:data,es:data
main proc far
push ds
xor ax,ax
push ax
cld
;***********************************************************************
begin:
lea di,name0
mov ax,data
mov ds,ax
mov es,ax
start:
mov dx,offset NO_10
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,'y'
jne exit
cmp lengthth,20
jge ERROR
call INPUT_NAME
call _name
cmp lengthth,1;40
jle start
call RANGE
jmp start
;######################################
ERROR:
mov dx,offset no_30
mov ah,9
int 21h
exit:
call printf
mov ah,4ch
int 21h
main endp
;********************************
INPUT_NAME proc near
mov dx,offset NO_11
mov ah,9
int 21h
mov dx,offset name1
mov ah,0ah
int 21h
mov bl,name1[1]
sub bh,bh
bbb:
mov name2[bx],'$'
inc bx
cmp bx,20
jb bbb
ret
;bbb覆蓋掉沒有輸入沒有用到的空間,不然在多次輸入的時候會出錯
input_name endp
;***********************************
_name proc near
lea si,name2
mov cx,14
rep movsw
inc lengthth
ret
_name endp
;*************************************
printf proc near
mov dx,offset disp
mov ah,9
int 21h
mov al,lengthth
cbw
mov bl,10
div bl
push ax
mov dl,al
xor dl,30h
mov ah,2
int 21h
pop ax
xchg dl,ah
xor dl,30h
mov ah,2
int 21h
mov dx,offset disp2
mov ah,09h
int 21h
xor ch,ch
mov cl,lengthth
xor si,si
llp:
call guang
lea dx,name0[si]
mov ah,09h
int 21h
add si,28
loop llp
ret
printf endp
;*************************
RANGE proc near
push di
sub di,28
lea dx,name0
XXX:
mov cx,28
mov si,di
sub si,28
cmp si,dx
jl xx
mov bx,di
repe cmpsb
jbe xx
call change
jmp xxx
xx:
pop di
ret
RANGE endp
;*********************
change proc near
sub bx,si
mov cx,bx
inc cx
dec di
dec si
lp:
mov al,[di]
xchg al,[si]
xchg al,[di]
inc di
inc si
loop lp
sub di,56
ret;交換完畢
;********************************
guang proc near
mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
int 21h
mov dx,offset disp3
mov ah,9
int 21h
ret
guang endp
;**********************
code ends
end begin
;09.12.15
;題目六 商品排序程序設計
;要求:
;編寫一個商品排序程序,從鍵盤鍵入最多20個商品名,當所有商品都進入後,按字母上升的次序將商品排序,並在屏幕上顯示已經排好序的商品名
;原題目:http://..com/question/128787580.html
;首先提示:Do you want to input name(y ?)?
;按下'y',再提示:Input name:(28),表示輸入的字元個數必須28以內。----這個數字不要輕易改動,這數字跟子程序change有關聯。
;按下非'y',輸出:之前輸入的name的個數++排序後的name,每個name獨佔一行
D. 匯編語言課程設計 數字電子表
案例25
用中斷方式實現PC機間的相互通信
第10章
綜合程序設計
案例26
鍾表顯示
案例27
「霓紅燈」的模擬顯示
還是出去買本書吧.
<匯編語言課程設計案例精編>
E. 匯編語言課程設計題目
命令行參數編程:
還需要什麼提示呢
F. 匯編語言課程設計
CODESEGMENT
ASSUMECS:CODE
STR1DB'$'
LENGTH1DB0
START:PUSHCS
POPDS
CALLCOUNT
MOVAL,LENGTH1
CALLDSPAL
MOVAH,4CH
INT21H
;===============================
COUNT:
LEASI,STR1
CLD
@1:
LODSB
CMPAL,'$'
JE@EXIT
CMPAL,'0'
JB@1
CMPAL,'9'
JA@1
INCBYTEPTRLENGTH1
JMP@1
@EXIT:
RET
;===============================
DSPALPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHF
XORAH,AH
XORCX,CX
MOVBL,10
@DSPAL1:
DIVBL
INCCX
MOVDL,AH
XORAH,AH
ORDX,30H
PUSHDX
CMPAL,0
JNE@DSPAL1
MOVAH,2
@DISPAL2:
POPDX
INT21H
LOOP@DISPAL2
MOVDL,32
INT21H
POPF
POPDX
POPCX
POPBX
POPAX
RET
DSPALENDP
;================================
CODEENDS
ENDSTART
G. intel匯編語言課程設計
intel匯編語言課程設計:編密碼
要求: 按照以下規律編密碼:字母A變為E,a變為e,即變成其他的第一4個字母,W變A,X變B,Y變C,Z變為D,非字母不變。如「CHINA」變為「GLMRE!」
; 本程序通過編譯,運行正確
Code Segment
Assume CS:Code,DS:Code
; -----------------------------------------
; 功能:顯示指定地址(Str_Addr)的字元串
; 入口:
; Str_Addr=字元串地址(要求在數據段)
; 用法: Output Str_Addr
; 用法舉例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -----------------------------------------
Prompt_Str db 'Please input a string: $'
Prompt_Str1 db 13,10,'The encoded string: $'
Press_Key db 13,10,13,10,'Press any key to exit...$'
Start: push cs
pop ds
push cs
pop es
Output Prompt_Str ;提示輸入字元串
lea dx,Buffer ;字元串緩沖區地址
mov ah,0ah ;dos功能調用0ah號功能:輸入字元串
int 21h
lea si,Buffer[1] ;實際輸入的字元個數地址
lodsb ;讀入實際輸入的字元個數
test al,0ffh
jz Exit_Proc ;若直接回車,未輸入任何字元,則結束程序,返回操作系統
xor ah,ah ;累加器高位位元組清零
mov cx,ax
@@Encoding: lodsb ;讀入一個字元
mov ah,al
and ah,0dfh ;假定這個字元為字母,將小寫變為大寫
cmp ah,'A'
jb @@Next_Chr ;不是字母,不加密
cmp ah,'Z'
ja @@Next_Chr ;不是字母,不加密
add al,4 ;加密
mov ah,al
and ah,0dfh
cmp ah,'Z' ;加密後的字元超出字母範圍?
jbe $+4 ;否,轉去將加密後的字元寫回原位置
sub al,26 ;調整
mov [si-1],al ;加密後的字元寫回原位置
@@Next_Chr: loop @@Encoding
mov byte ptr [si],'$' ;將這個字元串以$符結尾,准備用dos功能調用9號功能顯示這個字元串
Output Prompt_Str1 ;提示顯示加密後的字元串
Output Buffer[2] ;顯示加密後的字元串
Output Press_Key
mov ah,1
int 21h
Exit_Proc: mov ah,4ch ;結束程序
int 21h
Buffer db 255,? ;字元串緩沖區
Code ENDS
END Start ;編譯到此結束
H. 匯編課程設計任務書大一怎麼寫
OK ,幫你一把!
I. 單片機課程設計,求大神給匯編程序
單片機甲(按鈕):
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV TMOD,#20H
MOV SCON,#40H
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
MOV R4,#0
LOOP:
MOV A,P3
CPL A
JZ LOOP
LOOP1:
RRC A
INC R4
JNC LOOP1
MOV A,R4
MOV SBUF,A
JNB TI,$
CLR TI
SJMP LOOP
END
單片機乙:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV TMOD,#20H
MOV SCON,#50H
MOV TH1,#0FDH
MOV TL1,#0FDH
SETB TR1
MOV DPTR,#TABLE
LOOP:
JNB RI,$
CLR RI
MOV A,SBUF
MOVC A,@+DPTR
MOV P1,A
SJMP LOOP
TABLE: ; 共陰極數碼管顯示代碼表
DB 3FH,06H,5BH,4FH,66H ;01234
DB 6DH,7DH,07H,7FH,6fh ;56789
END
J. 匯編語言課程設計屏幕上設計一個圖形,用不同的顏色進行填充
結構體定義
;char year[4] // 年
; 空格(1 Byte)
;int income (4 Bytes)// 收入
; 空格
;empoyer num (2 Bytes) // 雇員數
; 空格
;人均收入 (2 Bytes)
; 空格
; 要求:將data段的數據拷貝進table段數據,並結構化如上述格式,然後計算21年的人均收入
assume ds:data, es:table, cs:code, ss:stack
data segment
db '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983'
db '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992'
db '1993', '1994', '1995'
dd 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514
dd 345980, 590827, 803530, 1183000, 1843000, 2759000, 3753000, 4649000, 5937000
dw 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258, 2793, 4037, 5635, 8226
dw 11542, 14430, 15257, 17800
data ends
table segment
db 21 p ('year summ ne ?? ')
table ends
display segment
db 21 p ('year summ ne ?? ')
display ends
; 弄個棧,沒什麼用
; 就用來有時候騰出個寄存器來用
stack segment
dw 16 p(0)
stack ends
code segment
start:
; 設置data段,以及ds:bx指向data段的第一個單元,即ds:[bx]的內容就是data段第一個單元的內容
mov ax, data
mov ds, ax
; 設置table段
mov ax, table
mov es, ax
; 設置堆棧段
mov ax, stack
mov ss, ax
mov sp, 16
; 初始化三個變址寄存器
mov bx, 0
mov si, 0
mov di, 0
; 准備復制,需要用到循環,21次
mov cx, 21
s_start:
; 年
mov ax, ds:[bx+0] ; 這里寫個0是為了下面的對照,清晰點
mov es:[si+0], ax
mov ax, ds:[bx+2]
mov es:[si+2], ax
; 空格
mov al, 32
mov es:[si+4], al
; 收入
mov ax, ds:[bx+84]
mov es:[si+5], ax
mov ax, ds:[bx+86]
mov es:[si+7], ax
; 空格
mov al, 32
mov es:[si+9], al
; 雇員數,小心處理
mov ax, ds:[di+168]
mov es:[si+0ah], ax
; 空格
mov al, 32
mov es:[si+0ch], al
; 算人均收入,這里小心高低位
mov ax, ds:[bx+84]
mov dx, ds:[bx+86]
push cx ; 臨時用一下cx,因為不可以 div ds:[bx+168]
mov cx, ds:[di+168]
div word ptr cx
pop cx
mov es:[si+0dh], ax
; 空格
mov al, 32
mov es:[si+0fh], al
add si, 16
add bx, 4
add di, 2 ; 這里記住要加上2
loop s_start
; 上面已經將數據排列好放在table段里,table 段在es:[0] 開始
; 下面就是要讀這些數據,並計算好行列,顯示在屏幕上
; 結構化的數據按位元組排列如下:
; 0123 年(字元) 4 空格(字元) 5678 收入(數據) 9 空格 A B 雇員數(數據) C 空格 D E 人均收入(數據) F 空格
; 總共21年
; 其中收入、雇員數、人均收入是需要轉字元格式的
mov ax, display
mov ds, ax
mov si, 0
mov di, 0
mov bx, 0
mov cx, 21
loop_display:
push cx
; #### 年
mov si, 0
mov ax, es:[di]
mov ds:[si], ax
mov ax, es:[di + 2]
mov ds:[si+2], ax
mov ax, 0
mov ds:[si+4], ax ; 原來的顯示錯誤,mov ds:[si+5], ax , 錯一個位元組都不行。。。
; 顯示年
mov dl, 20 ; 第20列
call dis
; #### 收入
mov ax, es:[di+5] ; 低16位
mov dx, es:[di+7] ; 高16位
mov si, 0
call dwtoc ; ds:si 指向字元串首地址
; 顯示收入
mov dl, 28 ; 第28列
call dis
; #### 雇員數
mov ax, es:[di+0Ah]
mov si, 0
call dtoc
; 顯示雇員數
mov dl, 36 ; 第36列
call dis
; ####人均收入
mov ax, es:[di+0Dh]
mov si, 0
call dtoc
; 顯示人均收入
mov dl, 44 ; 第44列
call dis
add di, 16
pop cx
sub cx, 1
jcxz end_main
jmp near ptr loop_display
end_main:
mov ah, 01h
int 21h
mov ax, 4c00h
int 21h
; 子程序dis
; 功能:封裝一些相同的操作
; 參數:(dl) 為列數
dis:
push ax
push bx
push cx
push dx
push di
push si
mov ax, di
mov dh, 16
div dh
mov dh, al
add dh, 2 ; dh = di/16+2
mov si, 0
mov cl, 2
call show_str
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
; 子程序:dtoc
; 功能:將word型數據轉變成表示十進制的字元串,字元串以0結尾
; 參數:(ax) = word 型數據
; ds:si 指向字元串首地址
; 返回:無
dtoc: