汇编课程设计
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: