+ -
当前位置:首页 → 问答吧 → 简单字符拷贝功能,汇编movsb没有生效?

简单字符拷贝功能,汇编movsb没有生效?

时间:2010-12-31

来源:互联网



.model small
.stack

.code

start:

c1 db "T"
c2 db "*"

cld

lea di,c2
lea si,c1

movsb
lodsb
stosb


mov ah,02
mov dl,c2
int 21h

Exit:
mov ah,4ch
mov al,00
int 21h

end start


结果还是输出*,我期望输出T. WHY?

作者: MyNoName   发布时间: 2010-12-31

.model small
.stack
;.data

.code



c1 db "T"
c2 db "*"
start:
cld

lea di,c2
lea si,c1

movsb
lodsb
stosb


mov ah,02
mov dl,c2
int 21h

Exit:
mov ah,4ch
mov al,00
int 21h

end start

作者: leetow2003   发布时间: 2010-12-31


不会写简化段的。试试完整段的吧
assume cs:code,ds:data,es:data
data segment
c1 db 'T'
c2 db '*'
data ends
code segment
start:
  mov ax,data
  mov ds,ax
  mov es,ax
  lea si,c1
  lea di,c2
  cld
  movsb
  lodsb
  mov dl,al
  mov ah,2
  int 21h
  mov ah,4ch
  int 21h
code ends
end start

作者: masmaster   发布时间: 2010-12-31

对不起,这个可以
.model small
.stack
.data
c1 db "T"
c2 db "*"
.code




start:
mov ax,@data
mov ds,ax
mov es,ax
cld

lea di,c2
lea si,c1

movsb
;lodsb
;stosb


mov ah,02
mov dl,c2
int 21h

Exit:
mov ah,4ch
mov al,00
int 21h

end start

作者: leetow2003   发布时间: 2010-12-31

data segment
  c1 db "T"
c2 db "*"
data ends

stack segment
  ;input stack segment code here
stack ends

code segment
  assume cs:code,ds:data,ss:stack
start:
  mov ax, data
  mov ds, ax
   
  mov es, ax
   
cld
lea di,c2
lea si,c1

movsb
lodsb
stosb


mov ah,02
mov dl,c2
int 21h

Exit:
mov ah,4ch
mov al,00
int 21h
code ends
end start

作者: ydfivy   发布时间: 2010-12-31

movsb将位于地址 DS:(E)SI 的字节移到地址 ES:(E)DI。楼主要给es赋值才行。

作者: ydfivy   发布时间: 2010-12-31

一定要使用.data,然后
mov ax,@data
mov ds,ax
mov es,ax
这样的方式?

TASM中,是不是定义变量的话,就得使用.data段?

如果不使用.data数据段的话,怎么写?

作者: MyNoName   发布时间: 2010-12-31