汇编语言输入字符串,为什么会从str后面第三位置开始写入?
DOS中断21号
功能0AH
功能描述: 从标准输入设备上读入一个字节字符串,遇到“回车键”结束输入(输入的字符在标准的输出设备上有回显)。如果该输入操作被重定向,那么,将无法判断文件是否已到文件尾
入口参数: AH=0AH
DS:DX=存放输入字符的起始地址
接受输入字符串缓冲区的定义说明:
1、第一个字节为缓冲区的最大容量,可认为是入口参数;
2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;
3、从第三个字节开始存放实际输入的字符串;
4、字符串以回车键结束,回车符是接受的最后一个字符;
5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。
例如:
BUFF 80, ?, 80 DUP(?) ;最多接受80个字符
出口参数: 无
例子:
BUFF 80, ?, 80 DUP(?)
.
.
.
lea dx,buff
mov ah,0ah
int 21h
输入内容是12345678
那么指令执行结果buff的内存数据为:
50h 08h 31h 32h 33h 34h 35h 36h 37h 38h 0dh
你输入的字符串是31h到38h,0dh是结束标志。
使用串传送指令:
CX存放字符串的长度,DS:SI存放源字符串的地址,ES:DI存放目的字符串的地址,cld设置向高地址单元位移。
执行rep movsb
data segment str0 db 'Please input a string(<9):$' str1 db 'Please input the index of the char to display:$' str db 20 ;-- the max number of the input string db 0 ;-- the real length of the input string db 20 dup(0), '$' crlf db 0dh, 0ah, '$'data endscode segmentassume cs:code, ds:datastart: mov ax, data mov ds, ax ; read string lea dx, str0 mov ah,9 int 21h lea dx, str mov ah, 0ah int 21h lea dx, crlf mov ah,9 int 21h ;read the position lea dx, str1 mov ah,9 int 21h mov ah,1 int 21h and al,0Fh mov bh,0 mov bl,al lea dx, crlf mov ah,9 int 21h inc bl mov al,str[bx] mov ah,0eh int 10h mov ah,4ch int 21hcode ends end start
因为微软在设计0A号dos功能调用就是这样安排的,规则就是这样。详细的规则为:
第0字节:可输入的字符串最大长度(含回车符)
第1字节:输入字符串的实际长度(不含回车符)
第2~N字节:存放实际输入的字符串
AB PLC 的ST语言编程,图中的字符串赋值语句错在哪里?应该怎么写?(图中...
两个问题。1.要将字符赋给字符串,需要指定字符的值或指定标签名称、DATA 成员和字符的元素。2.字符要用十进制数表示。例如steptag.DATA[0] := 32 你用Steptag显示步序,在字符'STEP'后面用CONCAT或者INSERT插入Step就行
C语言编程:有两个字符串st1,st2,编程找出st2是否在是st1中
可以使用C标准库吗?如果能的话,include<string.h> char *strp=NULL;strp=strstr(str1,str2);if(strp != NULL){ printf("%s 在 %s中\\n",str2,str1);}else{ printf("%s 不在 %s中\\n",str2,str1);}
C语言gets函数的疑问
gets是读入一个字符串,你可以看一下gets的函数原型:char*gets(char*buffer);函数要求输入一个字符指针,然后返回一个字符指针。所以你想,char st[15]是一个字符数组,st是数组名,也是数组的首地址,所以 gets(st)就是把st的首地址传到函数里面,是满足gets函数原型要求。而st[15]本身是错误的,...
st语言入门
ST语言中的赋值操作是一个核心概念,其本质是将一个“值”赋予某个变量。这个值可以是一个具体的数字,也可以是更为复杂的数据结构,如字符串、数组等。赋值操作在编程中极为常见,它允许程序员动态地改变变量的值,从而实现程序逻辑的变化。在ST语言中,赋值语句通常遵循特定的格式。例如,将一个值...
C语言中有string吗?
C语言中没有string类型。string类型是 C++、java、VB等编程语言中的。 在java、C#中,String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。string 是C++标准程序库中的一个头文件,定义了C++标准中的字符串的基本模板类std::basic_string及相关的模板类实例。而在C语言中,C...
c语言中string怎么用啊
include"stdio.h"main(){ static char c[]="BASIC\\ndBASE";puts(c);} 2.字符串输入函数gets 格式: gets (字符数组名) 功能:从标准输入设备键盘上输入一个字符串。 本函数得到一个函数值,即为该字符数组的首地址。include"stdio.h"main(){ char st[15];printf("input string:\\n");gets...
C语言编程:主函数输入一行有空格和数字的字符串,求这行字符串的缩写,怎...
include <stdio.h> include <string.h> include <ctype.h> char *p = "无法生成缩写词!";char s[10001], buf[10001];char * strTos(char *str) { if (strlen(str) < 4)return p;int word = 0, len = 0, i = 0;char *t = str, temp;while (*t) { if (*t == ' ' |...
C语言函数题,编辑一段函数,将输入的字符串的前三个字母移到后面!_百 ...
\/\/函数,输入字符串,返回字符串前三字母。publicfunctiongetStoreName($str){ one=mb_substr($str,0,1,'utf-8');two=mb_substr($str,1,2,'utf-8');three=mb_substr($str,2,3,'utf-8');if(preg_match('\/^[\\x7f-\\xff]+$\/',$one)){ one=getFirstCharter($one);} if(preg_...
C语言输入三个字符串,按由小到大排列
include<stdio.h> char * swap(cha *a,char *b){if strcmp(a,b)>=0 return a;else return b;} main(){int i;char *d,a[10],b[10],c[10];printf("input fitst:");scanf("%s",a);printf("input second:");scanf("%s",b);printf("input third:");scanf("%s",c);d=...
C语言编程,写一个函数,使输入的一个字符串按反序存放,在主函数中输入和...
include <stdio.h> include <string.h> void input(char st[]);\/\/定义输入函数 void reverse(char st[]);\/\/定义反序函数 int main(){ char s[20];input(s);\/\/调用输入函数 printf("Original string: %s\\n", s);\/\/输出原字符串 reverse(s);\/\/调用反序函数 printf("New string: %s\\...