回 帖 发 新 帖 刷新版面

主题:帮我看看这个问题

data segment    ;定义数据段
    infon db 0dh,0ah,'Please input a year: $'
    Y db 0dh,0ah,'This is a leap year! $'
    N db 0dh,0ah,'This is not a leap year! $'
    w dw 0
    buf db 8
        db ?
        db 8 dup(?)
data ends

上面数据段是那样定义的



下面是代码段的定义
          lea dx,buf    ;这个是什么意思,"buf开始存储的8是什么意思"??
          mov ah,10
          int 21h
          
          mov cl, [buf+1]   ;为什么要把[buf+1]的问号存到cl里面??
          lea di,buf+2      ;这里为什么又要取buf+2的地址
          call datacate
          call ifyears
          jc a1




 datacate proc near;
          push cx;   ;这个压栈是什么意思,有什么作用                                                 
          dec cx
          lea si,buf+2

回复列表 (共6个回复)

沙发

buf开始存储的8是表示BUF能装的数据是8个

[buf+1]的问号存到cl里面,是为了把BUF中的数据个数取到CL中

这里为什么又要取buf+2的地址,是为了把BUF中的数据输出

板凳

buf开始存储的8是表示BUF能装的数据是8个

那我有点不理解这个
 buf db 8
     db ?
     db 8 dup(?)

我只知道变量定义伪指令,buf db 8这样写的,像上面那样写算什么?
也算变量定义伪指令的格式吗?


/////////////////////////////////////////////////////
[buf+1]的问号存到cl里面,是为了把BUF中的数据个数取到CL中

不是存储的问号到CL中吗?怎么是存储BUF的数据个数了?存储8???



3 楼


看样你还是不理解啊

第一个8,是表示该缓冲区最多能放8个字节,你可以尝试着往这个缓冲区输入字符,输到8个之后,你就再也输不进去了

比如说,你输入了5个字符,然后回车,此时,那个问号的值是5
然后放到CL中,表示该缓冲区中有五个字符

明白了吧………………

4 楼

lea di,buf+2   

lea si,buf+2

这样就能把把BUF中的数据输出???
为什么?>>

而且为什么上面用di,下面用si??
//////////////////////////////////////////////
datacate proc near;
          push cx;   ;这个压栈是什么意思,有什么作用,是不是压入的是CL的内容?                                                 
          dec cx   ;这里又为什么要这样?


麻烦你了,谢谢

5 楼

si和di不都无所谓吗?
放到哪个指针寄存器都行啊

buf+2,也就是把前面两个标识跳过去啊
只输出内容

datacate proc near;
          push cx;   ;这个压栈是什么意思,有什么作用,是不是压入的是CL的内容?                                                 
其实是怕别的程序调用该过程的时候,改变cx,影响程序的执行,这样在这个过程里面用完后,再把cx出栈,这样对调用它的程序就没有影响了

好好想想就很容易理解了
也多上机试一下

6 楼

看完你们的问题和回复后,我也清楚了一些,在此谢谢啦

我来回复

您尚未登录,请登录后再回复。点此登录或注册