定义和字节的问题
本帖最后由 四象轮回 于 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啊。
四象轮回 发表于 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的空间来接收数据 懂汇编的果然是牛人 我压根就看不懂 O(∩_∩)O~
还得好好努力啊 O(∩_∩)O~ 21 DUP(0)偷懒写法 ,21个字节是0 ,你总不能打上20个0吧 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-24 20:59 static/image/common/back.gif
我是问 DB 21,0,21 DUP(0) 和DB 21 DUP(0)的区别
谢谢你!:big 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]