淘豆网
下载此文档放大查看缩小查看   1/12
下载文档 文档分类:办公文档 > 工作总结

微机接口实验二.doc

下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表
下载前请先预览,预览内容跟原文是一样的,在线预览图片经过高度压缩,下载原文更清晰。
0/100
您的浏览器不支持进度条


播放器加载中,请稍候...
更多>>该用户其他文档
下载所得到的文件列表
微机接口实验二.doc
文档介绍:
微机接口实验二
实验目的:
1. 熟悉masm汇编程序的过程步骤
2. 掌握汇编程序编写方法,学会使用选择、循环等语句结构,学会在汇编程序中使用DOS功能命令。
3. 学习Debug调试程序的方法技巧
二、实验内容
改写书上例3-1,要求通过键盘输入10个符号数,找出其中的最小值并分别以十进制和十六进制形式显示出来。要求画出流程并编写程序。
设数据段中存放了15个带符号的字数据。要求统计其中正数、负数和零的个数,分别将个数放在PLUS、MINUS和ZERO单元。并将个数以十六进制数的形式显示在屏幕上。
实验程序及结果
找出10个数的最小值并以十进制和十六进制形式输出。
编写的源程序:
data segment
buffer1 db 'putin:','$';
buffer2 db 100
db ?
db 100 dup (?)
min1 dw ? ;最小数的十六进制数
min2 db 6 dup (?) ;最小数的十进制数的ASCI码
min3 dw ? ;最小数的十六进制数的ASCI码
buffer3 db 20 dup(?)
buffer4 db 'putout(10)','$' ;10
buffer5 db 'putout(16)','$'
data ends
stack segment stack 'stack'
db 100 dup('s')
stack ends ;15
code segment para 'code'
assume cs: code, ss:stack
sta proc far
push ds
xor ax,ax ;20
push ax ;程序前奏
mov ax,data ;将段首址赋给ax
mov ds,ax
lea dx,buffer1
mov ah,9
int 21h
lea dx,buffer2
mov ah,10
int 21h ;27
lea di,buffer2+2
lea si,buffer3
mov ax,0
mov bx,0
mov cx,0
mov dx,0
next1: mov al,[di] ;判断输入的是否为负号
cmp al,'-'
jnz next2
mov ch,1 ;若输入为负号,将ch的值置为1
inc di
jmp next1
next2: cmp al,'$'
jz next8
sbb al,30h ;next2,3,4将输入的数转换为十进制
mov bl,al
inc di

next3: mov al,[di] ;判断一个数是否结束
cmp al,','
jnz next4
cmp ch,1
jnz next7
neg bx
next4: cmp al,'$'
jz next4
sub al,30h ;将输入的数转化为十进制数
shl bx,1 ;逻辑左移指令
mov dx,bx
mov cl,2
shl bx,cl
add bx,dx
add bx,ax
inc di
jmp next1
next7: mov [si],bx ;将转换后的数放入存储空间
mov bx,0
mov ch,0
inc si ;指令增量,使操作数内容加1
inc si
inc di
jmp next1
next8: lea si,buffer3 ;比较存储器中十六进制数的大小,取出最小值
mov cx,10
dec cx
mov ax,[si]
next9: cmp ax,[si+2]
jng next10
mov ax,[si+2]
next10: inc si
inc si
loop next9
mov min1,ax
mov cx,0
mov bl,10
add ax,0
jns next11
mov bh,1 ;负数的话就将标志bh置1
neg ax
inc si ;把十六进制转换成十进制的ASCII码
next11: dec si
div bl
add ah,30h ;总是将余数加上30h变成ASCII码,存入
mov [si],ah
inc cx
and ax,00ffh
cmp ax,0
jnz next11
cmp bh,1 ;若是负数的话就将所存值得前面加一负号
jnz next13
dec si
mov al,'-'
mov [si],al
inc cx
next12: mov al,[si]
mov [di],al
inc di
inc si
loop next11
mov al,'$'
mov [di],al
mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h
lea dx,buffer4
mov ah,9
int 21h
lea dx,min2 ;输出十进制的最小数
mov ah,9
int 21h
lea di,min1
lea si,min3
mov cx,2
next13: lea di,min2 ;将所得到的最小数的ASCII码存入指定的地址中
next14: push cx
mov ah,[di+1] ;将十六进制数转化成相应的ASCII
mov bh,ah
mov cl,4
shr bh,cl
cmp bh,9
jna next15
add bh,7 ;十六进制数的字符大于9的时候,加上07h
next15: add bh,30h
mov [si],bh
inc si
and ah,0fh
cmp ah,9
jna next16
add ah,7 ;十六进制数的字符大于9的时候,加上07h
next16: add ah,30h
mov [si],ah
inc si
dec di
pop cx
loop next13
mov al,'$'
mov [si],al
mov dl,0ah
mov ah,2
int 21h
mov dl,0dh
mov ah,2
int 21h
lea dx,buffer5
mov ah,9
int 21h
lea dx,min3 ;输出十六进制的最小数
mov ah,9
int 21h
ret
sta endp
code ends
end sta
用masm进行编译连接:
统计正负数和零的个数。
编写的源程序:
d 内容来自淘豆网www.taodocs.com转载请标明出处.