微机接口实验二
实验目的:
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]
微机接口实验二 来自淘豆网www.taodocs.com转载请标明出处.