主题:问几个汇编的问题
cfan8888
[专家分:0] 发布于 2007-06-24 00:39:00
刚学汇编没多久,遇到了几个问题,没想明白,请大家帮忙,如下:
1、字符串输入指令mov ah,10,输入的字符是以ascii码存储吗?
2、调用mov ah,10指令时,需先定义缓冲区。我定义如下:
buf db 5
db ?
db 5 dup(0)
输入的字符从第三个字节开始存放,那是不是最多只能存放3个输入字符?
为什么我在输入时,最多可以输入4个字符?
3、可不可以编个小例演示一下,用mov ah,10指令往buf存输入的字符,然后将缓冲区的内容分别显示出来(包括其大小和实际字符数)?
回复列表 (共4个回复)
沙发
heidonglgc [专家分:1370] 发布于 2007-06-24 10:51:00
1。不是ASCII,是10进制数10
2。最多可放5个字符,最后一个是0DH,输入的时候只除了0DH外,只能有4个
3。data segment
ask db 'Input:$'
_size db 'Size:$'
content db 'Content:$'
buf db 5
db ?
db 5 dup(0)
data ends
;;;
code segment
assume cs:code, ds:data
_start: mov ax,data
mov ds,ax
;;
mov dx,offset ask
mov ah,9
int 21h
;;
mov dx,offset buf
mov ah,10
int 21h
;;
mov dl,13
mov ah,2h
int 21h
mov dl,10
int 21h
;;
mov bl,buf+1
add bl,30h
mov dx,offset _size
mov ah,9h
int 21h
mov dl,bl
mov ah,2h
int 21h
;;
mov dl,13
mov ah,2h
int 21h
mov dl,10
int 21h
;;
mov dx,offset content
mov ah,9h
int 21h
mov cl,buf+1
xor ch,ch
mov si,offset buf+1
_output:
inc si
mov dl,[si]
mov ah,2h
int 21h
loop _output
;;
mov ah,4ch
int 21h
code ends
end _start
板凳
忘忧→志在必得 [专家分:120] 发布于 2007-06-24 21:53:00
1、字符串输入指令mov ah,10,输入的字符是以ascii码存储吗?
是的,假如你定义的键盘缓冲区是BUF,那么从BUF+1开始都对应你输入的一个字符的ASCII码。
2、调用mov ah,10指令时,需先定义缓冲区。我定义如下:
buf db 5
db ?
db 5 dup(0)
输入的字符从第三个字节开始存放,那是不是最多只能存放3个输入字符?
实际可以输入4个,从buf+1开始存的.
DATAS SEGMENT
STR DB 'Please input a string:$'
BUF DB 20
DB ?
DB 20 DUP(?)
CRLF DB 0AH,0DH,'$'
DATAS ENDS
STACKS SEGMENT
DB 200 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
LEA DX,STR
MOV AH,9
INT 21H
MOV AH,10
LEA DX,BUF
INT 21H
LEA DX,CRLF
MOV AH,9
INT 21H
MOV AL,BUF+1
ADD AL,2
MOV AH,0
MOV SI,AX
MOV BUF[SI],24H
LEA DX,BUF+2
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODES ENDS
END START
[url=http://blog.sina.com.cn/u/4c59c08a010007fh]http://blog.sina.com.cn/u/4c59c08a010007fh[/url]
我博客也有讨论类似问题.
3 楼
cfan8888 [专家分:0] 发布于 2007-06-24 23:01:00
多谢两位的帮助^_^
4 楼
laiming [专家分:0] 发布于 2007-06-26 09:05:00
多谢高人,要不都不知道怎么办呢。
我来回复