汇编语言键盘输入10个数据,然后按相同顺序显示
; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code Segment
Assume CS:Code,DS:Code
CR equ 000DH
LF equ 000AH
KBBack equ 0008H
; -------------------------------------
; 功能:显示指定地址(Str_Addr)的字符串
; 入口:
; Str_Addr=字符串地址(要求在数据段)
; 用法: Output Str_Addr
; 用法举例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:输出一个字符
; 入口:dl=要显示的字符
Output_Chr proc Near
push ax
mov ah,02h
int 21h
pop ax
ret
Output_Chr endp
; -------------------------------------
; 功能:输出回车换行
Output_CTLF proc Near
push ax
push dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Output_CTLF endp
; -------------------------------------
; 功能:取光标位置
; 入口:无
; 出口:DH=行号,DL=列号
GetCursor Proc Near
PUSH AX
PUSH BX
PUSH CX
XOR BX,BX
MOV AH,3
INT 10H
MOV Cursor_Row,DH
MOV Cursor_Col,DL
POP CX
POP BX
POP AX
RET
Cursor_Row DB ?
Cursor_Col DB ?
GetCursor EndP
; -------------------------------------
; 功能:置光标位置
; 入口:Cursor_Row=行坐标; Cursor_Col: 列坐标)
SetCursor Proc Near
PUSH CX
PUSH BX
PUSH AX
MOV DH,Cursor_Row
MOV DL,Cursor_Col
XOR BX,BX
MOV AH,2
INT 10H
POP AX
POP BX
POP CX
RET
SetCursor EndP
; -------------------------------------
; 功能:键盘输入一个指定位数的十进制数字,将其转换成二进制数并保存在指定的内存单元。
; 由于限定最大数据类型为字,所以,数字位数最多:5,最大无符号数:65536
; 约定:直接回车,视为数字0
; 入口:@@Digits=数字位数;di=保存输入的数字首地址
; @@Type_Data=保存的数据类型,B=字节类型,W=字类型。
; 出口:转换后的二进制数保存在di所指的单元
Input_Digit Proc Near
push dx
push cx
push bx
push di
lea di,@@Save_Tmp
push di
cld
mov cl,@@Digits
xor ch,ch
push cx
@@Input: call GetCursor ;取光标位置
mov ah,1 ;从键盘接受一个字符
int 21h
cmp al,CR ;若键入的是回车,已经键入的数字不足N位
jz @@ASC_Dec ;转去处理已经键入的数字
cmp al,KBBack
jz @@KB_Back ;若是回空键,重新输入
cmp al,'0'
jb @@KBBack ;若低于数字'0',重新输入
cmp al,'9'
ja @@KBBack ;若低于数字'9',重新输入
jmp @@Save_Dig
@@KB_Back: dec Cursor_Col
inc cx
dec di
@@KBBack: call SetCursor ;置光标位置
jmp @@Input
@@Save_Dig: and al,0fh ;转换成二进制数
stosb ;保存
loop @@Input ;接受下一个数字
@@ASC_Dec: mov ax,cx
pop cx
pop si
sub cx,ax ;实际输入的数字位数
xor bp,bp
xor dx,dx
xor ax,ax
jcxz @@Save_Ret ;若直接回车,没有输入任何数字,按输入'0'处理
dec cx ;实际输入的数字位数减1,准备把输入的这一串数字转换成二进制数
jcxz @@One_Digit ;若输入的数字只有一位,转去直接保存这个二进制数
mov bx,10
@@Mul_Ten: lodsb
cbw
add ax,bp
mul bx
mov bp,ax
loop @@Mul_Ten
@@One_Digit: lodsb
cbw
add ax,bp
@@Save_Ret: pop di
cmp @@Type_Data,'B' ;字节类型?
jz $+5
stosw
jmp $+3
stosb
pop bx
pop cx
pop dx
ret
@@Digits db ? ;十进制数字位数
@@Type_Data db 'B' ;保存的数据类型。B=字节类型,W=字类型
@@Save_Tmp db 16 dup(?)
Input_Digit EndP
; -------------------------------------
; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; 出口:在当前光标位置显示转换后的ASCII码数字
Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
dec di
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 dup(?)
Dec_ASCII EndP
; -------------------------------------
Counter equ 10 ;数据个数
Temp_Cursor dw ? ;输入数据时,当前数据光标位置
prompt_Str db 'Please input the datas: $'
Press_Key db CR,LF,CR,LF,'Press any key to exit...$'
Start: push cs
pop ds
push cs
pop es ;使数据段、附加段与代码段同段
; -------------------------------------
; 输入数据
Output prompt_Str ;提示输入数据
mov @@Digits,4 ;十进制数字位数
mov @@Type_Data,'W' ;保存的数据类型。B=字节类型,W=字类型
lea di,List_Datas ;数据存放地址
mov cx,Counter
Input_Datas: call GetCursor ;取光标位置
mov dx,WORD ptr Cursor_Row
mov Temp_Cursor,dx ;保存当前光标位置
call Input_Digit ;输入数据
cmp cx,1
je @@Next_One
mov dx,Temp_Cursor
add dh,4
mov Cursor_Row,dl
mov Cursor_Col,dh
call SetCursor ;置光标位置
mov dl,20h
call Output_Chr ;显示一个字符
@@Next_One: loop Input_Datas
call Output_CTLF
call Output_CTLF
; -------------------------------------
; 用冒泡排序法将字数据升序排序
lea si,List_Datas ;数据存放地址
mov cx,Counter ;字数据个数
dec cx ;准备用冒泡排序法排序
@@Sorting: push cx ;入栈保存外循环次数
push si ;入栈保存数组地址
@@Compare: push si
pop di ;当前数组元素地址赋给目的变址寄存器,以备交换之用
lodsw ;读入当前字数据给AX
cmp ax,[si] ;当前字数据与相邻的下一个字数据相比较
jbe $+5 ;若小于或等于,不作数据交换,处理下一个数组元素
xchg ax,[si] ;若大于,交换数据
stosw ;保存数值较小者
loop @@Compare ;处理下一个数组元素
pop si ;数组地址出栈
pop cx ;外循环次数出栈
loop @@Sorting ;下一趟比较
; -------------------------------------
; 显示排序结果
lea si,List_Datas ;数据存放地址
mov cx,Counter ;字数据个数
@@List_Table: lodsw
call Dec_ASCII ;把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
mov dl,20h
call Output_Chr ;在当前光标位置显示一个字符
loop @@List_Table
; -------------------------------------
Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序
mov ah,1
int 21h
mov ah,4ch ;结束程序
int 21h
List_Datas: ;数据缓冲区
Code ENDS
END Start ;编译到此结束
#include using namespace std;int main(){int a[10];int max_i=0,min_i=0,sum=0,i,j,k,q;for(i=0;i>a[i];for(j=1;ja[k])min_i=k;for(q=0;q<10;q++)sum=sum+a[q];cout<<"The max="<<a[max_i]<<endl;cout<<"The min="<<a[min_i]<<endl;cout<<"The sum="<<sum<<endl;return 0;}这是c++编的,谢谢
DATA SEGMENTDATA ENDS
DATAA SEGMENT
DATA1 DB '0123456789'
DATAA ENDS
STACK1 SEGMENT STACK
DW 100 DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK1,DS:DATA,ES:DATAA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,DATAA
MOV ES,AX
XOR AX,AX
MOV CX,10
CLD
LEA DI,DATA1
MOV AL,0
L1:
STOSB
INC AL
LOOP L1
MOV CX,10
LEA SI,DATA1
L2:
MOV DL,[SI]
ADD DL,30H
MOV AH,02H
INT 21H
INC SI
LOOP L2
MOV AH,4CH
INT 21H
CODE ENDS
END START
最好先明确一下是什么芯片。但是思路不是相当的明确吗?可以用一个计数变量用以计录输入的数据个数;10个存贮地址,用来存贮输入的数据;一个送显函数把10个存贮地址里的数据送显。
通过计数变量先判断是否已输入10个数据,如果已达10个,则不做存贮;若未满10个则送相应地址存贮;送显。
建议考虑数组和指针。
请说明详细要求:怎么输入,是用逗号隔开还是空格隔开,或者每个数据输入以回车结束,
要不要输入提示,
输出的数据是用什么分隔开来,还是每行一个数据。
数据有无大小和范围,是否有负数,输入数据的进制,输出数据的进制。
请先确认在显示数据时,按照什么顺序?
1.数据输入的顺序?
2.大小排序?
3.其他顺序要求?
什么语言都不懂
c语言如何从键盘输入10个整数,并输出结果?
C语言从键盘输入任意的10个整数,从中找出最大值和最小值的具体步骤如下:1、首先输入 include<stdio.h> int main(){ int arr[10] = {0};int i = 0;int max = 0;int min = 0;printf("请输入10个整数:");2、然后输入 for (i = 0; i < sizeof(arr)\/ sizeof(arr[0]); i+...
用C语言编写,输入10个数按降序排列
include<stdio.h>\/\/头文件;intmain(){ inti=0;intj=0;doubletemp=0;doublea[10]={0};\/\/定义三个变量和一个长度为10的数组;printf("请输入十个数:\\n");\/\/显示“请输入十个数”for(i=0;i<10;i++){ scanf("%lf",&a[i]);\/\/从键盘上输入十个数送到数组;} for(i=1;i<10;...
C语言编从键盘输入十个数,计算其平均值,同时按由大到小输出这十个数...
} average=sum*1.0\/N;for(i=0;i<N;i++)for(j=0;j<N-1;j++){ if(a[j]<a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;} } for(i=0;i<N;i++)printf("%3d",a[i]);printf("\\n%f",average);system("pause");return 0;} 用DEV C++,编的,看看行不行 ...
从键盘上输入一个长度为十的数组,然后逆序输出(C语言编程)
\/ 从键盘上接收10个字符,按逆序输出 \/ include <stdio.h> include <conio.h> int main(int argc, char*argv[]){ char szInput[10] ="";int i =0;printf( "请输入10个字符:");gets( szInput);for( i =9; i >=0; --i){ putchar( szInput[i]);} printf( "\\n");return ...
用C语言编程:从键盘输入10个学生的成绩和学号,将其排序输出,并输出中...
程序运行时,会依次提示输入10个学生的学号和成绩,然后对这些成绩进行排序,最后输出排序后的学号和成绩。排序算法采用的是冒泡排序,通过两层循环比较并交换元素的位置,直到所有元素按成绩从小到大排序。在输出排序后的结果时,使用`for`循环遍历整个结构体数组,依次输出每个学生的学号和成绩。通过这个简单...
...从键盘输入一个长度为10的实型一维数组,然后顺序输出数组中的元素...
C语言程序编写教程:创建一个程序,接收用户输入的十个实数,并依次输出这些数值,同时找出其中的最大值及其对应的下标。首先定义一个长度为10的实型一维数组,然后使用循环结构从键盘读取十个实数值。接着遍历数组,比较元素大小,记录下最大值及其位置。最后输出数组所有元素,并显示最大值及其下标。下面...
编一程序,输入10个学生的学号,姓名,总分,然后按总分排序后给出_百度知...
include <stdio.h> define N 200 define SCORES 5 define NUMLEN 10 struct std_type{ char no[NUMLEN];\/*学号*\/ char *name;\/*名字字符串指针*\/ int scores[SCORES];\/*五门功课的成绩*\/ };struct std_type students[N];int order[N];int total[N];\/*[函数]输入一个学生信息函数*\/ ...
C语言:从键盘上输入10个整数,将其保存到数组中,并按升序排列。
源程序代码以及算法解释如下:define _CRT_SECURE_NO_WARNINGS include<stdio.h> int main(){ int i, j;\/\/定义循环变量 int M_num;\/\/定义中间变量 const int N = 10;\/\/定义数组元素个数 int number[N];\/\/定义两个数组 printf("请输入10个数组元素:\\n");\/\/文字提示 for (i = 0; i ...
用C语言编程实现从键盘输入10个整数,求奇偶和?
以下是C语言代码,用于从键盘上输入10个整数,求这10个整数的奇数和及偶数和:```c include <stdio.h> int main(){ int num[10];int i, odd_sum = 0, even_sum = 0;\/\/ 输入10个整数 printf("请输入10个整数:\\n");for(i=0;i<10;i++)scanf("%d",&num[i]);\/\/ 计算奇数和...
C语言 从键盘输入10个整数,将这10个整数按从小到大的顺序输出。_百度知 ...
1、打开软件进入页面,点击文件-新建-文件-C++ Source File。2、输入预处理命令和主函数:#include<stdio.h>\/*输入输出头文件*\/void main()\/*空类型:主函数*\/。3、定义变量和数组的数据输入10个数:int a[10],i,t;\/*定义变量和数组数据类型为整型*\/printf("输入10个整数:");\/*输出文字...