大黑鱼 发表于 2014-4-15 10:48:45

求大神解释这个汇编语句

data segment
    lenmaxdb3
    actlendb?
    stringdb   20dup(?)
data ends
code segment
assumeds:data,cs:code
start: mov ax,data
       mov ds,ax
       lea dx,lenmax
       mov AH,0AH
       INT 21H
       mov dl,al
       mov ah,9
       int 21h
       MOV AH,4CH
       INT 21H

code ends
end


青玄 发表于 2014-4-15 16:07:45

data segment               ;定义数据段
    lenmaxdb3          ;定义3个字节
    actlendb?
    stringdb   20dup(?)    ;给定20个字节的空间
data ends
code segment                  ;定义代码段
assumeds:data,cs:code      ;data表示ds段;code表示cs段
start: mov ax,data         ;将data段的首地址放到ax里面
       mov ds,ax             ;这里也就是讲data的首地址放到ds段寄存器里面
       lea dx,lenmax         ;将lenmax的地址放到dx里面,用来存放输入的数据
       mov AH,0AH            ;调用0AH号DOS系统功能调用,执行一次命令行输入。
       INT 21H
       mov dl,al      ;将al的地址放到dl中,这里是将要输出的数据
       mov ah,9          ;是输出字符串功能
       int 21h         ;这里是调用dos21号功能
       MOV AH,4CH
       INT 21H

code ends
end

大黑鱼 发表于 2014-4-15 16:36:57

青玄 发表于 2014-4-15 16:07 static/image/common/back.gif
data segment               ;定义数据段
    lenmaxdb3          ;定义3个字节
    actlendb?

这个程序可以输入3个字符吗?还是两个?

青玄 发表于 2014-4-15 16:44:04

大黑鱼 发表于 2014-4-15 16:36 static/image/common/back.gif
这个程序可以输入3个字符吗?还是两个?

只能输出2个字符,因为我想是这样的:你定义了3个字节的数据,而后面还有一个默认的结尾字符0,也就是这样的:lenmaxdb?,?,0   不然的话,程序就不知道怎么结尾了!

大黑鱼 发表于 2014-4-15 18:04:26

青玄 发表于 2014-4-15 16:44 static/image/common/back.gif
只能输出2个字符,因为我想是这样的:你定义了3个字节的数据,而后面还有一个默认的结尾字符0,也就是这样 ...

我觉得也应该是两个,但是我试了一下为什么可以显示三个呢?

青玄 发表于 2014-4-15 23:50:22

大黑鱼 发表于 2014-4-15 18:04 static/image/common/back.gif
我觉得也应该是两个,但是我试了一下为什么可以显示三个呢?

咦!我的上面是两个啊!只能输入两个,再输入的话,就输不进去了!嗯...,你用的是那个版本的编译器啊!我用的是masm5.0的版本!
页: [1]
查看完整版本: 求大神解释这个汇编语句