注册 登录
编程论坛 汇编论坛

来请教汇编语言的基础问题来了

star5578 发布于 2010-12-15 22:28, 775 次点击
程序代码:
data segment
buffer db 80
       db 0
       db 80 dup(0)
data ends
code segment
start:
     mov ax,data
     mov ds,ax
   
     mov dx,offset buffer
     mov ah,0ah
     int 21h
   
     push,bx

     mov ax,4c00h
     int 21h
code ends
     end   start
输入的字符串为什么不能压入bx中呢?字符串不是存在寄存器dx中吗?

[ 本帖最后由 star5578 于 2010-12-15 22:50 编辑 ]
7 回复
#2
star55782010-12-16 09:49
怎么没人解答呀?
#3
zaixuexi2010-12-16 09:59
程序代码:
assume cs:code,ds:data
data segment
buffer db 80
       db 0
       db 80 dup(0)
data ends
code segment
start:
     mov ax,data
     mov ds,ax
   
     mov dx,offset buffer
     mov ah,0ah
     int 21h
   
     ;push bx

     mov ax,4c00h
     int 21h
code ends
     end   start

输入的字符串为什么不能压入bx中呢?字符串不是存在寄存器dx中吗?

不是很明白你的意思,你这句话的转折好象比较突然...你是要问bx还是dx?

字符串不是存在寄存器dx中 mov dx,offset buffer 表示dx中是buffer的偏移地址
buffer db 80        ;定长
       db 0         ;输入长度
       db 80 dup(0) ;这里面是你字符串存放的空间,比如你输入了"hello world"

你push bx只是把bx的内容压入堆栈了,和字符串没什么关系.如果你还有其他问题,希望可以再描述的详细些吧,呵呵.

#4
star55782010-12-16 12:06
回复 3楼 zaixuexi
DOS功能调用int 21h 输入字符串功能:ah=0ah,输入的字符串不是存在寄存器中是存在哪里呢?谢谢解答
#5
star55782010-12-16 12:10
回复 3楼 zaixuexi
DOS功能调用int 21h 输入字符串功能:ah=0ah,这样输入的字符串,如果我想把它压栈能一起压入吗? 应该怎么实现呢?不能直接push吗?
#6
zaixuexi2010-12-16 12:34
1.
buffer是你数据段自己定义的缓冲区
buffer db 80        ;定长
       db 0         ;输入长度
       db 80 dup(0) ;这里面是你字符串存放的空间,比如你输入了"hello world"输入的字符串不是存在寄存器中是存在这里!!!
2.如果我想把它压栈能一起压入吗?你想把字符串放进寄存器最多只能一次放2个字节,那样处理不是相当麻烦么.
一般来说,你如果是为了子程序调用,就压首地址就行了,相当于传一个数组
mov bx,offset buffer+81
mov cx,ds:buffer[80]
push cx
push bx
call sub
3.如果你还是不太理解,再问问你们老师看看,可能我讲的不好,呵呵.
#7
star55782010-12-16 12:56
回复 6楼 zaixuexi
谢谢!!!
#8
zaixuexi2010-12-16 13:04
不用谢的,明白了就好,呵呵
1