DATA SEGMENT
STR DB 'HELLO'
STR2 DB 5 DUP(0)
ENDS
CODE SEGMENT
CLD
LEA SI, STR
LEA DI, STR2
MOV CX, 5
REP MOVSB
ENDS
执行完后,打开VARS,str成了cello,str2也是cello,为什么啊
还有,单步执行时,cld没有执行,被跳过了,如果改成
DATA SEGMENT
STR DB 'HELLO0'
STR2 DB 6 DUP(0)
ENDS
CODE SEGMENT
CLD
LEA SI, STR
LEA DI, STR2
MOV CX, 6
REP MOVSB
ENDS
6 个解决方案
#1
执行完后,打开VARS,str成了cello,str2也是cello,为什么啊
楼主,什么是VARS?
楼主,什么是VARS?
#2
LZ的代码像是在考验编译器的能耐呵呵! 是单步了,但是编译器编出来的不是代码那样写的逻辑 !
‘偏移量’这个东西在这里做怪吧。。。
编译器需要知道到哪里结束编译,这里需要用到end 《标号》吧!这个标号指名你的程序哪里开始执行。
DATA SEGMENT...这里写着的是伪指令,是给编译器编译源码用的!
下面的si引用的ds不一定是上面的data segment的段值。。所以呀,应该是“偏移量”在这里搞了鬼吧!
建议lz按汇编程序的规范来学习asm先。
以上仅代码个人看法哈。
‘偏移量’这个东西在这里做怪吧。。。
编译器需要知道到哪里结束编译,这里需要用到end 《标号》吧!这个标号指名你的程序哪里开始执行。
DATA SEGMENT...这里写着的是伪指令,是给编译器编译源码用的!
下面的si引用的ds不一定是上面的data segment的段值。。所以呀,应该是“偏移量”在这里搞了鬼吧!
建议lz按汇编程序的规范来学习asm先。
以上仅代码个人看法哈。
#3
;
;This Program Compiled Sucess by Masm 6.15
;
assume cs:code,ds:data
data segment
str0 db 'hello'
str1 db 5 dup (?)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov es,ax
mov cx,5
mov si,offset str0
mov di,offset str1
cld
rep movsb
mov ah,4ch
int 21h
code ends
end start
PS:
1,cello抑或hello?
2,str在高版本masm里是关键字
3,贴程序尽量完整
#4
你的入口地址没有了吧
你的语法是不是有点问题呢?
ends前应该有段的名字
你的语法是不是有点问题呢?
ends前应该有段的名字
#5
不要单步,直接运行看看。
#6
assume cs:code,ds:data
data segment
str1 db 1h,2h,3h,4h,5h
str2 DB 5 DUP(0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov es,ax
lea si, str1
lea di, str2
mov cx, 5
cld
rep movsb
mov ah,4ch
int 21h
code ends
end start
楼主都没指定ds es 怎么跑起来的
起初ds 和es都指向的是0c9a 实际的数据都在0caa后面
data segment
str1 db 1h,2h,3h,4h,5h
str2 DB 5 DUP(0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov es,ax
lea si, str1
lea di, str2
mov cx, 5
cld
rep movsb
mov ah,4ch
int 21h
code ends
end start
楼主都没指定ds es 怎么跑起来的
起初ds 和es都指向的是0c9a 实际的数据都在0caa后面
#1
执行完后,打开VARS,str成了cello,str2也是cello,为什么啊
楼主,什么是VARS?
楼主,什么是VARS?
#2
LZ的代码像是在考验编译器的能耐呵呵! 是单步了,但是编译器编出来的不是代码那样写的逻辑 !
‘偏移量’这个东西在这里做怪吧。。。
编译器需要知道到哪里结束编译,这里需要用到end 《标号》吧!这个标号指名你的程序哪里开始执行。
DATA SEGMENT...这里写着的是伪指令,是给编译器编译源码用的!
下面的si引用的ds不一定是上面的data segment的段值。。所以呀,应该是“偏移量”在这里搞了鬼吧!
建议lz按汇编程序的规范来学习asm先。
以上仅代码个人看法哈。
‘偏移量’这个东西在这里做怪吧。。。
编译器需要知道到哪里结束编译,这里需要用到end 《标号》吧!这个标号指名你的程序哪里开始执行。
DATA SEGMENT...这里写着的是伪指令,是给编译器编译源码用的!
下面的si引用的ds不一定是上面的data segment的段值。。所以呀,应该是“偏移量”在这里搞了鬼吧!
建议lz按汇编程序的规范来学习asm先。
以上仅代码个人看法哈。
#3
;
;This Program Compiled Sucess by Masm 6.15
;
assume cs:code,ds:data
data segment
str0 db 'hello'
str1 db 5 dup (?)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov es,ax
mov cx,5
mov si,offset str0
mov di,offset str1
cld
rep movsb
mov ah,4ch
int 21h
code ends
end start
PS:
1,cello抑或hello?
2,str在高版本masm里是关键字
3,贴程序尽量完整
#4
你的入口地址没有了吧
你的语法是不是有点问题呢?
ends前应该有段的名字
你的语法是不是有点问题呢?
ends前应该有段的名字
#5
不要单步,直接运行看看。
#6
assume cs:code,ds:data
data segment
str1 db 1h,2h,3h,4h,5h
str2 DB 5 DUP(0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov es,ax
lea si, str1
lea di, str2
mov cx, 5
cld
rep movsb
mov ah,4ch
int 21h
code ends
end start
楼主都没指定ds es 怎么跑起来的
起初ds 和es都指向的是0c9a 实际的数据都在0caa后面
data segment
str1 db 1h,2h,3h,4h,5h
str2 DB 5 DUP(0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov es,ax
lea si, str1
lea di, str2
mov cx, 5
cld
rep movsb
mov ah,4ch
int 21h
code ends
end start
楼主都没指定ds es 怎么跑起来的
起初ds 和es都指向的是0c9a 实际的数据都在0caa后面