一、1.程序。stack segment stack
db 256 dup(?)
top label word
stack ends
data segment
table dw g1, g2, g3, g4, g5
string1 db '1. change small letters into capital letters of string;',0dh, 0ah, '
string2 db '2. find the maximum of string;',0dh, 0ah, '
string3 db '3. sort for datas;',0dh, 0ah, '
string4 db '4. show time;',0dh, 0ah, '
string5 db '5. exit.',0dh, 0ah, '
stringn db 'input the number you select (1-5) :
in_str db 'input the string (including letters & numbers, less than 60 letters) :0dh, 0ah, '
prestr db 'original string :
newstr db 'new string
out_str db 'the string is $'
maxchr db 'the maximum is $'
in_num db 'input the numbers (0 - 255, no more than 20 numbers) :0dh, 0ah, '
out_num db 'sorted numbers : 0dh, 0ah, '
in_tim db 'correct the time (hh:mm:ss) :
hintstr db 'press esc, go back to the menu; or press any key to play again!$'
keybuf db 61
db ?db 61 dup (?
numbuf db ?
db 20 dup (?
data ends
code segment
assume cs:code, ds:data, ss:stack
start:
mov ax, data
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, offset top
main: call far ptr menu设置显示器。
again:
mov ah, 2
mov bh, 0页号。
mov dl, 41列号。
mov dh, 10行号。
int 10h光标位置设置。
mov ah, 1
int 21h
cmp al, '1'
jb again
cmp al, '5'
ja again
sub al, '1n-1
shl al, 1n-1)*2
cbwal->ax
lea bx, table
add bx, ax
jmp word ptr [bx]
g1:call far ptr chgltr
mov ah, 8
int 21h
cmp al, 1bh
jz main
jmp g1
g2:call far ptr maxltr
mov ah, 8
int 21h
cmp al, 1bh
jz main
jmp g2
g3:call far ptr sortnum
mov ah, 8
int 21h
cmp al, 1bh
jz main
jmp g3
g4:call far ptr timchk
mov ah, 8
int 21h
cmp al, 1bh
jz main
jmp g4
g5:mov ah, 4ch
int 21h
menu proc far显示主界面。
;设置显示器方式。
mov ah, 0
mov al, 3;
mov bl, 0;
int 10h清屏。
mov ah, 2
mov bh, 0页号。
mov dl, 5列号。
mov dh, 5行号。
int 10h光标位置设置。
mov ah, 9
lea dx, string1
int 21h
mov ah, 2
mov dl, 5列号。
mov dh, 6行号。
int 10h光标位置设置。
mov ah, 9
lea dx, string2
int 21h
mov ah, 2
mov dl, 5列号。
mov dh, 7行号。
int 10h光标位置设置。
mov ah, 9
lea dx, string3
int 21h
mov ah, 2
mov dl, 5列号。
mov dh, 8行号。
int 10h光标位置设置。
mov ah, 9
lea dx, string4
int 21h
mov ah, 2
mov dl, 5列号。
mov dh, 9行号。
int 10h光标位置设置。
mov ah, 9
lea dx, string5
int 21h
mov ah, 2
mov dl, 5列号。
mov dh, 10行号。
int 10h光标位置设置。
mov ah, 9
lea dx, stringn
int 21h
retmenu endp
chgltr proc far将输入字符串中小写字母便换成大写字母。
rechg:
;设置显示器方式。
mov ah, 0
mov al, 3
mov bl, 0
int 10h清屏。
mov ah, 2
mov bh, 0页号。
mov dl, 5列号。
mov dh, 5行号。
int 10h输入提示光标位置设置。
mov ah, 9
lea dx, in_str
int 21h输入字符串提示。
mov ah, 2
mov dl, 5列号。
mov dh, 6行号。
int 10h输入字符串光标位置设置。
mov ah, 0ah
lea dx, keybuf
int 21h输入字符串。
cmp keybuf + 1, 0
jz rechg判断输入字符串是否为空串。
lea bx, keybuf + 2
mov al, keybuf + 1
cbwmov cx, ax
add bx, ax
mov byte ptr [bx在输入字符串尾加结束标志$
mov ah, 2
mov bh, 0页号。
mov dl, 5列号。
mov dh, 7行号。
int 10h源字符串提示光标位置设置。
mov ah, 9
lea dx, prestr
int 21h输出源字符串提示。
mov ah, 9
lea dx, keybuf + 2
int 21h输出源字符串。
lea bx, keybuf + 2
lchg:cmp byte ptr [bx], 61h
jb nochg
and byte ptr [bx], 0dfh
nochg:
inc bx
loop lchg将字符串中小写字母转换成大写字母。
mov ah, 2
mov bh, 0页号。
mov dl, 5列号。
mov dh, 8行号。
int 10h新字符串提示光标位置设置。
mov ah, 9
lea dx, newstr
int 21h输出新字符串提示。
mov ah, 9
lea dx, keybuf + 2
int 21h输出新字符串。
mov ah, 2
mov bh, 0页号。
mov dl, 5列号。
mov dh, 9行号。
int 10h提示信息光标位置设置。
mov ah, 9
lea dx, hintstr
int 21h输出提示信息。
retchgltr endp
maxltr proc far在输入字符串中找出最大值。
remax:
;设置显示器方式。
mov ah, 0
mov al, 3
mov bl, 0
int 10h清屏。
mov ah, 2
mov bh, 0页号。
mov dl, 5列号。
mov dh, 5行号。
int 10h输入提示光标位置设置。
mov ah, 9
lea dx, in_str
int 21h输入字符串提示。
mov ah, 2
mov dl, 5列号。
mov dh, 6行号。
int 10h输入字符串光标位置设置。
mov ah, 0ah
lea dx, keybuf
int 21h输入字符串。
cmp keybuf + 1, 0
jz remax判断输入字符串是否为空串。
lea bx, keybuf + 2
mov al, keybuf + 1
cbwmov cx, ax
add bx, ax
mov byte ptr [bx在输入字符串位加结束标志$
mov ah, 2
mov bh, 0页号。
mov dl, 5列号。
mov dh, 7行号。
int 10h源字符串提示光标位置设置。
mov ah, 9
lea dx, out_str
int 21h输出字符串提示。
mov ah, 9
lea dx, keybuf + 2
int 21h输出字符串。
mov ah, 2
mov bh, 0页号。
mov dl, 5列号。
mov dh, 8行号。
int 10h新字符串提示光标位置设置。
mov ah, 9
lea dx, maxchr
int 21h输出字符串中最大值提示。
mov dl, 0
lea bx, keybuf + 2
lcmp:cmp [bx], dl
jb nolchg
mov dl, [bx]
nolchg:
inc bx
loop lcmp找出字符串中最大字符,放入dl
mov ah, 2
int 21h输出字符串中最大字符。
mov ah, 2
mov bh, 0页号。
mov dl, 5列号。
mov dh, 9行号。
int 10h提示信息光标位置设置。
mov ah, 9
lea dx, hintstr
int 21h输出提示信息。
retmaxltr endp
sortnum proc far对输入数据组排序。
resort:
;设置显示器方式。
mov ah, 0
mov al, 3
mov bl, 0
int 10h清屏。
mov ah, 2
微机原理大作业
大作业2 8086微机系统设计,具体要求如下 工作在最小方式。2 工作时钟频率为 5mhz。3 系统地址总线形成用74ls373。系统数据总线形成用74ls245。4 外部扩充设计16kb程序存储器,芯片选用intel2764,首地址从fc000h开始 外部扩充设计16kb数据存储器,芯片选用int...
微机原理课程大作业
张三在工作中需用8086汇编语言编程,且经常需进行三个变量x,y及z的如下运算 为此张三决定将该三变量的运算操作写成子程序,以便随时调用。不过张三不想自己独立编写该8086汇编子程序,而是采用如下方式获得该8086汇编子程序 编写如下c语言程序 注意 整理过程主要包括调整变量x,y及z为16位数据长...
西电微机原理大作业
科目 微机原理与系统设计 授课老师 李明 何学辉 学院 电子工程学院 专业 电子信息工程 学生姓名。学号。基于8086最小方式系统总线完成电路设计及编程 1 扩展16k字节的rom存储器,起始地址为 0x10000 intel 2764的存储容量为8kb,因此用两片intel 2764构成连续的ra...