键盘输入数值数组子程序(数组名为array,元素个数存放在num中)
inputnum proc near
输入的数据以一个空格分隔,以回车符结束输入
push cs
pop es
lea di,array 将数组第一个元素的有效地址置入DI
mov word ptr[num],0
stin:
mov ax,0
push ax
again1:
mov ah,1
int 21h
mov byte ptr[char],al
cmp al,13
je line0
cmp al,' '
je line0
sub al,30h
mov ah,0
mov si,ax
pop ax
mov cl,10
mov ch,0
mul cx
add ax,si
push ax
jmp again1
line0:
pop ax
mov word ptr[di],ax
inc word ptr[num]
cmp byte ptr[char],13
je stinend
inc di
inc di
jmp stin
stinend:
ret
array dw 100 dup(0)
num dw 0
char db ?
inputnum endp
=====================================================
修改了一下,现在是以F6为结束的,回车结束比较麻烦。#include <stdio.h>
int keyin(int input[], int n)
{
int k
printf("请输入数组:(空格为分隔符,回车为结束标志) ")
for(k=0k<nk++)
{
if ( scanf("%d", &input[k]) == EOF )
{
break
}
}
return k//如何修改?
}
int main()
{
int i,n
int yhl[10]//如何修改
n = keyin( yhl, 10 )//如何修改?
for ( i = 0i <n++i )
{
printf( "%d ", yhl[i] )
}
printf( "\n")
}
输出二进制的子程序,其实是很简单的。DATA SEGMENT定义源数据段,数据段名称为DATA
MSR DB"PLEASE INPUT DATA:$"
DATA ENDS
CODE SEGMENT定义代码段, 代码段名称为CODE
ASSUME CS:CODE,DS:DATA
START:
MOV AX, DATA 装载数据段
MOV DS, AX
MOV AH, 09H显示提示信息PLEASE INPUT DATA:
MOV DX, OFFSET MSR
INT 21H
MOV AH, 01H从键盘输入一个一位十进制数,该数据保存在AL中
INT 21H
MOV BL, AL 将AL寄存器的数值存放到BL寄存器中
MOV AH, 02H
MOV DL, 0DH输出回车符号
INT 21H
MOV DL, 0AH输出换行符号
INT 21H
CALL XIANSHI调用子程序
MOV AH, 4CH返回DOS状态,固定结构
INT 21H
-----------------------------------
XIANSHI PROC子函数定义
将BL寄存器中的数值以二进制形式输出
MOV AH, 02H
SUB BL, 30H求出该十进制数
MOV CX, 8 循环次数
AG:
MOV DL, '0'
ROL BL, 1 循环左移一位,后最高位进入C标志
JNC PRINT1 C标志为0,跳到PRINT输出0
INC DL 否则就输出1
PRINT1:
INT 21H
LOOP AG
RET
XIANSHI ENDP
-----------------------------------
CODE ENDS
END START
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)