+ -
当前位置:首页 → 问答吧 → 帮我看看 我这个程序能实现么

帮我看看 我这个程序能实现么

时间:2011-08-14

来源:互联网

Assembly code

STR DB 'HELLO'
STR2 DB 5 DUP(?)
CLD
LEA SI, STR
LEA DI, STR2
MOV CX, 5
REP MOVSB


问题1:想把“hello”送到附加段中以str2开始的单元内,能实现么
问题2:为什么STR2 DB 5 DUP(?)编译不通过,STR2 DB 5就行(emu8086编译)

作者: mr_cpp   发布时间: 2011-08-14

STR2 DB 5 DUP(?) 把问号置成0就行!这个在EMU8086是这样的啦。

作者: abee23   发布时间: 2011-08-14

Assembly code

; multi-segment executable file template.
;想把“hello”送到附加段中以str2开始的单元内,能实现么

data segment  ;DS SEGMENT
    STR DB 'HELLO'
ends
esdata  segment ;ES SEGMENT
    STR2    db 5 dup(0)
ends
stack segment
    dw   128  dup(0)
ends

code segment
start:
; set segment registers:
    mov ax, data
    mov ds, ax 
    mov ax,esdata
    mov es, ax

    ; add your code here
    cld
    lea si,str
    lea di,str2
    mov cx,5
    rep movsb
    
    mov ax, 4c00h ; exit to operating system.
    int 21h    
ends

end start ; set entry point and stop the assembler.




作者: abee23   发布时间: 2011-08-14

引用 2 楼 abee23 的回复:
Assembly code


; multi-segment executable file template.
;想把“hello”送到附加段中以str2开始的单元内,能实现么

data segment ;DS SEGMENT
STR DB 'HELLO'
ends
esdata segment ;ES SEGMENT
STR2 db 5 dup……


用emU调试时,看看VARS,就可以看到两个段的数据啦!成功copy过去了。

作者: abee23   发布时间: 2011-08-14

还有为什么 cld 这个没有执行,如果 STR2 DB 5 DUP(?)
改成STR2 DB 6就行 DUP(?)

作者: mr_cpp   发布时间: 2011-08-14

上面CLD是执行了的呀!
你说str2 db 6 dup(?) 不行是吧? 这个在EMU8086这个环境下是不行,编译不过的!所以我用 str2 db 6(0) 来用0填充str2开始的6个字节!这个不影响的!

如果你用masm编译的话,那么str2 db 6 dup(?)是可以的!

str2 db 6 这句是说定义一个字节,初始值为数字6. 

str2 db 6 dup(0) 是完全不一样的啦。

建议LZ看看基本知识。

作者: abee23   发布时间: 2011-08-14

热门下载

更多