汇编语言中字符串的使用
要求:输入一个字符串,并统计字符个数..
data segment
string1 db 20
len1 db 0
db 20 dup(0)
string2 db 'please input string:',0dh,0ah,'$'
data ends
assume cs:code,ds:data
code segment
start:
mov ax,data
mov ds,ax
lea dx,string2
mov ah,09h
int 21h
lea dx,string1
mov ah,0ah
int 21h
mov dl,[len1]
mov ah,02h
int 21h
mov ax,4c00h
int 21h
code ends
end start
这个程序为什么输出个数时是个乱码?我其实不是很懂字符串..
string1 db 20
len1 db 0
db 20 dup(0)
好像string后面的20是允许存储的最大字符串个数吧?那20个中包不包括'$'?
那len1是不是可以自动统计我输入的字符串个数?
如果我db 20 dup(0)那len1是不是一定已经是20个了?..
还有就是'$'号是什么情况下用?..
好像这里的string2后面如果不跟'$'号行不行?
那我这里输入的一个字符串string1后面是不是也要跟个'$'号?
追问:噢,那能把我另外的几个问题回答完不..
string1 db 20
len1 db 0
db 20 dup(0)
好像string后面的20是允许存储的最大字符串个数吧?那20个中包不包括'$'?
那len1是不是可以自动统计我输入的字符串个数?
如果我db 20 dup(0)那len1是不是一定已经是20个了?..
还有就是'$'号是什么情况下用?..
好像这里的string2后面如果不跟'$'号行不行?
那我这里输入的一个字符串string1后面是不是也要跟个'$'号?呵呵,输出,不是这样简单的。
len1,是二进制数字,必须把它变成十进制的个位、十位..,
再把各位数,都变换成ASCII码,放到DL中,最后才能输出到显示屏。
这个应该怎么做到呢?..
我不是很懂..好像我len1里面存了12..那即是[len1]=12..那电脑是怎么存储的?..是直接在len1的地址里存0000 1100么?
还是分别存在len1地址中存了0000 0002,len1+1地址中存0000 0001呢?
能不能加你QQ请教..这样好像说不是很清楚..
答案:mov dl,[len1]
mov ah,02h
int 21h
----
呵呵,输出,不是这样简单的。
len1,是二进制数字,必须把它变成十进制的个位、十位..,
再把各位数,都变换成ASCII码,放到DL中,最后才能输出到显示屏。
其他:DATA SEGMENT
BUFFER DB 21,?,21 DUP(?)
DATA ENDS
DATAS SEGMENT
NUM DB 0
DATAS ENDS
CODE SEGMENT
ASSUME CS:DATA,DS:CODE,SS:DATAS
START:
MOV AX,DATA
MOV DS,AX
MOV BX,DATAS
MOV SS,BX
MOV DX,OFFSET BUFFER ;字符窜输入
MOV AH,0AH
INT 21H
MOV DL,0AH ;换行
MOV AH,02H
INT 21H
MOV AH,01H ;单字符输入 存在AL中
INT 21H
LEA SI,BUFFER ;确定CX的值即循环次数
INC SI
MOV CX,0
MOV CL,[SI]
INC SI
R: CMP [SI],AL
JNZ TONG
INC NUM
TONG: INC SI
LOOP R
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH ;回车
MOV DL,NUM
ADD DL,30H ;使转换为ASCII表示的数值
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
上一个:汇编语言 怎么将输入的1个小于256的数字放入ax寄存器
下一个:MCGS汇编语言中不等于怎么表示?