四象轮回 发表于 2014-5-24 19:12:49

定义和字节的问题

本帖最后由 四象轮回 于 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不是+1
      MOV BYTE PTR message,DL
      LOOP S1
      MOV BYTE PTR message,'$'
      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,0DH   
      JNE S7
      MOV BYTE PTR message3,'$'
      ADD SI,21
      MOV CX,8
      MOV BX,-1
   S3:INC BX
      MOV DL,BYTE PTR message3
      MOV BYTE PTR message,DL
      LOOP S3
      MOV BYTE PTR message,'$'
      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+1啊。

vkevke_3437 发表于 2014-5-24 19:12:50

四象轮回 发表于 2014-5-24 20:59 static/image/common/back.gif
我是问 DB 21,0,21 DUP(0) 和DB 21 DUP(0)的区别

DB 21,0,21 DUP(0) 这样定义是给mov ah,10 int 21h中断做为接收键盘输入的一个缓冲区,查中断可以得知键盘的输入在缓冲区+2 这样就有了下面mov dl,byte ptr message2而不是+1
DB 21 DUP(0)定义的话 只是定义了大小19的空间来接收数据

牡丹花下死做鬼 发表于 2014-5-24 19:19:04

懂汇编的果然是牛人 我压根就看不懂 O(∩_∩)O~
还得好好努力啊 O(∩_∩)O~

oggplay 发表于 2014-5-24 20:28:47

21 DUP(0)偷懒写法 ,21个字节是0   ,你总不能打上20个0吧

四象轮回 发表于 2014-5-24 20:59:36

oggplay 发表于 2014-5-24 20:28 static/image/common/back.gif
21 DUP(0)偷懒写法 ,21个字节是0   ,你总不能打上20个0吧

我是问 DB 21,0,21 DUP(0) 和DB 21 DUP(0)的区别

四象轮回 发表于 2014-5-25 13:40:14

四象轮回 发表于 2014-5-24 20:59 static/image/common/back.gif
我是问 DB 21,0,21 DUP(0) 和DB 21 DUP(0)的区别

谢谢你!:big

四象轮回 发表于 2014-5-25 13:41:38

vkevke_3437 发表于 2014-5-24 19:12 static/image/common/back.gif
DB 21,0,21 DUP(0) 这样定义是给mov ah,10 int 21h中断做为接收键盘输入的一个缓冲区,查中断可以得知 ...

谢谢你!:big
页: [1]
查看完整版本: 定义和字节的问题