鱼C论坛

 找回密码
 立即注册
查看: 1594|回复: 6

定义和字节的问题

[复制链接]
发表于 2014-5-24 19:12:49 | 显示全部楼层 |阅读模式
15鱼币
本帖最后由 四象轮回 于 2014-5-24 19:26 编辑

DATAS SEGMENT  
message2 DB 21,0,21 DUP(0)   ;为何如此定义?
message3 DB 9,0,9 DUP(0)
message DB 1500 DUP(0)
OBF3 DB 'Please input a new name:$'
OBF4 DB 'please input the number:$'
OBF5 DB 'Continue to input?(y/n)$'
CODES SEGMENT
INPUT:
       CALL NEXTLINE  
       ADD BP,30                                                  
       MOV SI,BP                 
      MOV DX,OFFSET OBF3
      MOV AH,9
      INT 21H  
      MOV DX,OFFSET message2      
      MOV AH,10
      INT 21H
      MOV BX,-1   
      mov cx,20
  S1:INC BX                    
      MOV DL,BYTE PTR message2[BX+2]         ;为什么是bx+2不是+1
      MOV BYTE PTR message[SI+BX],DL
      LOOP S1  
      MOV BYTE PTR message[SI+20],'$'
      CALL NEXTLINE  
      MOV DX,OFFSET OBF4
      MOV AH,9
      INT 21H  
      MOV DX,OFFSET message3
      MOV AH,10
      INT 21H
      MOV BX,-1  
  S7:INC BX   
      CMP BYTE PTR message3[BX+2],0DH   
      JNE S7  
      MOV BYTE PTR message3[BX+2],'$'
      ADD SI,21
      MOV CX,8
      MOV BX,-1
   S3:INC BX  
      MOV DL,BYTE PTR message3[BX+2]
      MOV BYTE PTR message[SI+BX],DL
      LOOP S3  
      MOV BYTE PTR message[SI+8],'$'
      CALL NEXTLINE  
      MOV DX,OFFSET OBF5
      MOV AH,9
      INT 21H  
      CALL NEXTLINE
有问题的代码段如上,
第一个问题是为什么要message2 DB 21,0,21 DUP(0) 这样定义,而message2 DB 21 DUP(0)就错了?我是要定义一个大小为21的空间来接受数据。但message DB 1500 DUP(0)可以。其中message2是用来暂时保存刚输入的一组数据,message是用来保存所有输入的数据。
第二个问题是MOV DL,BYTE PTR message2[BX+2]     中为什么是bx+2?应该是bx+1啊。

最佳答案

查看完整内容

DB 21,0,21 DUP(0) 这样定义是给mov ah,10 int 21h中断做为接收键盘输入的一个缓冲区,查中断可以得知键盘的输入在缓冲区+2 这样就有了下面mov dl,byte ptr message2而不是+1 DB 21 DUP(0)定义的话 只是定义了大小19的空间来接收数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-24 19:12:50 | 显示全部楼层

DB 21,0,21 DUP(0) 这样定义是给mov ah,10 int 21h中断做为接收键盘输入的一个缓冲区,查中断可以得知键盘的输入在缓冲区+2 这样就有了下面mov dl,byte ptr message2[bx+2]而不是+1
DB 21 DUP(0)定义的话 只是定义了大小19的空间来接收数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-24 19:19:04 | 显示全部楼层
懂汇编的果然是牛人 我压根就看不懂 O(∩_∩)O~
还得好好努力啊 O(∩_∩)O~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-24 20:28:47 | 显示全部楼层
21 DUP(0)偷懒写法 ,21个字节是0   ,你总不能打上20个0吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-5-24 20:59:36 | 显示全部楼层
oggplay 发表于 2014-5-24 20:28
21 DUP(0)偷懒写法 ,21个字节是0   ,你总不能打上20个0吧

我是问 DB 21,0,21 DUP(0) 和DB 21 DUP(0)的区别
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-5-25 13:40:14 | 显示全部楼层
四象轮回 发表于 2014-5-24 20:59
我是问 DB 21,0,21 DUP(0) 和DB 21 DUP(0)的区别

谢谢你!:big
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-5-25 13:41:38 | 显示全部楼层
vkevke_3437 发表于 2014-5-24 19:12
DB 21,0,21 DUP(0) 这样定义是给mov ah,10 int 21h中断做为接收键盘输入的一个缓冲区,查中断可以得知 ...

谢谢你!:big
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-30 04:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表