汇编语言,怎么从键盘输入字符串呢?

作者&投稿:苑荣 (若有异议请与网页底部的电邮联系)
用汇编怎样实现从键盘输入一串字符至内存(利用DOS功能调用)?~

你的缓存区设置有误的,没有设置最大输入的字符数,默认为0,那当然不行。
0AH功能调用的时候要求将DS:DX指向缓冲区的第一个字节,并设置缓冲区的第一个字节以便指出所能容纳的最大字符的最大个数。正确如下~~~
DAT SEGMENT
NUMBERS DB 100 ;能存最大字符数,这里一定要设置
DB ? ;你输入的字符数,由计算机自动填写
DB 100 DUP(?) ;开始存放字符的段
DAT ENDS
STA SEGMENT STACK
DW 50 DUP(?)
STA ENDS
COD SEGMENT
ASSUME CS:COD,DS:DAT
START: MOV AX,DAT
MOV DS,AX
MOV AH,0AH
MOV DX,OFFSET NUMBERS ;取得存放数据的内存偏移地址,从键盘中输入
INT 21H
MOV AX,4C00H
INT 21H
COD ENDS
END START

下列程序已经调试通过。
;---------------------------------
DATA SEGMENT
MSG1 DB 13, 10, 'Please input a char : ', 13, 10, 13, 10, '$'
DDD1 DB 13, 10, 13, 10
DDD2 DB 81 DUP ('$')
DATA ENDS
;---------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
;---------------------------------
MOV DX, OFFSET MSG1
MOV AH, 9 ;9号功能调用,显示提示.
INT 21H ;显示.
MOV DI, OFFSET DDD2
LOP:
MOV AH, 1 ;输入字符.
INT 21H
CMP AL, 13
JZ EXIT ;'回车'结束.
MOV [DI], AL
INC DI
CMP DI, OFFSET DDD2 + 80
JZ EXIT ;输入80个字符了,也结束.
JMP LOP ;继续输入.
;---------------------------------
EXIT:
MOV DX, OFFSET DDD1
MOV AH, 9 ;9号功能调用.
INT 21H ;显示输入的字符.
;---------------------------------
MOV AH, 4CH ;程序结束.
INT 21H
;---------------------------------
CODE ENDS
END START
;---------------------------------

DATASSEGMENT

A100DUP(?)

DATASENDS

CODESSEGMENT

ASSUMECS:CODES,DS:DATAS,SS:STACKS

START:

MOVAX,DATAS

MOVDS,AX

MOVSI,OFFSETA

MOVCX,20

L:MOVAH,01H

INT21H

MOVA[SI],AL

INCSI

LOOPL

MOVAH,4CH

INT21H

CODESENDS

ENDSTART

扩展资料

汇编语言的优点

汇编语言的出现大大方便了程序员的程序编写和记忆,使计算机语言的发展向前迈进了一大步。但实际上,汇编语言仍然是一种低级语言,仍然是面向机器硬件的程序设计语言。

正因为如此,汇编语言今天仍被广泛用于编写面向机器硬件的实时控制程序和系统程序。例如机器自检、系统初始化、实际的输入和输出设备的操作等。



使用dos的10号功能调用实现。
10号功能调用的缓冲区结构为 buf db 255,?,255 dup(?)
   (注:各部分的含义:最大长度、输入串的实际长度(不含回车)、实际的串)
   
例如:

buf db 255,?,255 dup(?)

.............

mov ah,10
lea dx,buf
int 21h

实际的串的首地址在buf[2],可用 lea si,buf[2] 得到



用C语言编程从键盘输入一个正整数,判断其个位数是否为5,若是5则输出...
include <stdio.h> int main(){ int five;printf("输入一个整数:");scanf("%d",&five);while(five>10){ five = five%10;} if(five == 5)printf("yes");else printf("no");return 0;}

c语言编写程序,从键盘输入6名学生5门功课成绩,分别统计出每个学生的平...
一、问题分析 需要保存6名学生5门功课的成绩,需要设计一个6行5列大小的二维数组scores[6][5]来存储30个成绩数据。保存6名学生的平均成绩,需要设计一个6列大小的一维数组来avgs[6]存储平均成绩。为使程序具有更好的通用性,使用宏定义定义学生人数M和课程门数N。计算每个学生的平均成绩时,累加该...

用汇编语言用汇编语言编写从键盘上输入N个学生的成绩,然后按成绩降序输 ...
===; 键盘输入数值数组子程序(数组名为@array,元素个数存放在@num中); 可以是负数; 采用字符串缓冲方式输入 INPUTNUM PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSHF ...

c语言编程从键盘输入一个任意正整数,求其各位数字立方和。
include<stdio.h> intmain(){ inta;scanf("%d",&a);intb[10]={0};intk=0;while(a){ b[k]=a%10;a=a\/10;k++;} printf("%d\\n",k);inti=0,sum=0;while(i<=k){ sum=sum+b[i]*b[i]*b[i];i++;} printf("%d\\n",sum);} ...

c语言编程。从键盘输入一个大写字母,要求改用小写字母输出。_百度知 ...
代码如下:include<stdio.h>int main(){char a; printf("请输入一个大写英语字母:");scanf("%c",&a);printf("转换成小写字母为%c",a+32);} 运行结果如下:

C语言编程:从键盘输入一个有空格的字符串,删除所有重复字符,按字符升 ...
代码文本:include "stdio.h"int main(int argc,char *argv[]){ char a[101],*p,*px,t;printf("Input a string...\\n");for(p=a,t=0;t<100;t++)\/\/输入字符串 if((*(p+t)=getchar())=='\\n')break;(p+t)='\\0';for(p=a;*p;p++)\/\/排序 for(px=p+1;*px;px++)if...

怎么用C语言编写一个程序,它从键盘上输入5个整数,然后输出它们的积...
include<stdio.h> void main(){ int a,b,c,d,e,s;printf("请输入五个数以#结束:\\n");scanf("%d",&a);scanf("%d",&b);scanf("%d",&c);scanf("%d",&d);scanf("%d",&e);s=a*b*c*d*e;printf("五个数乘积为%d",s);} ...

C语言编程,从键盘输入一字符串,将其中的小写字母全部转换成大写字母_百 ...
代码如下:include <stdio.h> include <stdlib.h> include <ctype.h> int main() { FILE *fp;if((fp=fopen("123.txt","a"))==NULL)printf("file cannot open \\n");else printf("file opened for writing \\n");char ch;while((ch = getchar()) != '\\n'){ fputc(toupper(ch),...

用C语言编程:从键盘输入三个不相同的数,在屏幕输出最大数。
三个数x,y,z输出最大数,可以先比较x和y把最大值赋值给x,接着比较x和z,把最大值赋值给x,输出x即可。参考代码:include "stdio.h"int main(){ int x,y,z;scanf("%d%d%d",&x,&y,&z);if(x<y)x=y;if(x<z)x=z; printf("最大数为:%d",x); return 0;}\/*运行...

c语言编程:从键盘输入三个数,从大到小输出
int a=0,b=0,c=0,t;printf("请输入第一个数:");scanf("%d",&a);printf("请输入第二个数:");scanf("%d",&b);printf("请输入第三个数:");scanf("%d",&c);if(a<b){t=b;b=a;a=t;} else if(a<c){ t=c;c=a;a=t;} if(b<c){t=c;c=b;b=t;} printf("从...

武清区15736033713: 汇编语言,从键盘输入一字符串 -
明星芙苓: ;经运行,符合题目要求 code segment assume cs:code,ds:code org 100h start: push cs pop ds Q0:lea dx,Buffer mov ah,9 ;显示提示 int 21h mov si,200h ;硬编码缓冲区首址 mov byte ptr [si],0ffh ;置输入缓冲区大小为255个字符 mov dx,si ;定...

武清区15736033713: [汇编语言]由键盘输入任意字符串 然后显示出来 -
明星芙苓: data segment keyboard db 256,?,256 dup (?) data ends code segment assume cs:code,ds:data main proc far mov ax,data mov ds,ax lea dx,keyboard mov ah,0ah;输入字符串 int 21h lea di,keyboard mov cl,[di+1];取出实际输入字符的个数 mov ...

武清区15736033713: 从键盘输入一个字符串在下一行逆序输出用汇编语言如何实现 -
明星芙苓: 从键盘输入一个字符串在下一行逆序输出用汇编语言可用如下方法实现: ;汇编语言输入一串字符串,可以调用DOS功能中断INT 21H的06H功能. ;程序功能:输入一串字符,以回车符结束,输入字符串最大长度200字符; ; 输入结束在下一...

武清区15736033713: 用汇编语言实现从键盘输入一个串字符到输入缓冲区,然后将输入的字符串显现到屏幕上,再以相反地顺序显示! -
明星芙苓: 你只显示了相反的顺序,你又没有显示源字符串,

武清区15736033713: 一个简单的汇编程序问题:怎样从键盘输入字符串再马上原样输出. -
明星芙苓: …… MOV DX,OFFSET BUF ADD DX, 2 ;在BUF之后2字节,才是字符串的起始地址 MOV AH,9 ; 输出字符串 INT 21H ……

武清区15736033713: 用汇编语言编程,从键盘输入字符串,并将大小写互换,然后显示 -
明星芙苓: 问题非常多:1. 首先题目就有问题,不可能“接收从键盘输入的字符,以CTR+C 结束”.对于命令提示符来说,按下CTRL+C,就会强行退出这个程序,所以不可能以CTRL+C结束的.应该是按回车结束输入.2. DATA里有中文标点符号.3. ...

武清区15736033713: 汇编如何输入字符,再把它输出? -
明星芙苓: 看你是单个字符还是多个字符 1、单个字符输入调用int 21h的01H功能,即mov ah,01h int 21h,这样就可以从键盘输入字符进AL寄存器,然后,将刚才输入的字符转换为ASCII码,因为数据在内存中是以二进制存在,显示器显示的是ASCII码.再调用02H功能,就可以显示刚才键入的字符 2、而多个字符可以考虑循环输入单个字符的方式,但更可以用下面的方式:0AH功能,这个是将键盘输入的字符串读入缓冲区.然后,也需要将字符串中的字符逐个转换为ASCII码,再调用09H可显示输入的字符串.

武清区15736033713: 用汇编语言实现,从键盘输入任意字符(字母、数字、特殊符号等),并将其ASC2码值输出 -
明星芙苓: code segment assume cs:code start:mov ah,01h int 21h mov cx,02h n:call der cmp dl,09h ja next add dl,30h mov ah,02h int 21h loop n nc:int 3h next:add dl,37h mov ah,02h int 21h loop n jmp nc der:push cx mov dl,00 mov cx,4 b:shl al,1 rcl dl,1 loop b pop cx ret code ends end start

武清区15736033713: 用8086汇编语言编写一个输入字符串的程序 -
明星芙苓: 代码如下:DSEG SEGMENT SPACES DB 20H, 20H, 20H, 20H, 24H LINE DB 0DH, 0AH, 24H DSEG ENDS SSEG SEGMENT PARA STACK e68a84e8a2ad62616964757a686964616f31333365656563DW 256 DUP(?) SSEG ENDS CSEG ...

武清区15736033713: 在汇编语言中 如何经过键盘将值输入给指定的字符?急...... -
明星芙苓: 以下是画圆的程序 DATAS SEGMENT COLOR DW 02 BKCOLOR DW 15 X DW 280 Y DW 240 INF01 DB 13,10,'PLEASE INPUT THE RADIUS(100~999):$' BUFFER DB 10,3,7 DUP(?) RADIUS DW 0 TEN DB 10 HRD DB 100 DATAS ENDS ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网