注册 登录
编程论坛 汇编论坛

刚学16位汇编,如何能分段写程序?

libinden71 发布于 2019-11-22 00:12, 2632 次点击
程序代码:

assume cs:code,ds:data,ss:stack

data segment
    MSG_INFO    db  'hello world',0
data ends

stack segment stack
    db    128 dup (0)
stack ends

StringPorc segment
strlen proc  FAR uses CX DI  pStr:WORD   ;NEAR 段内跳跃   FAR 段跳跃

        mov cx, 0FFFFH
        mov di,pStr
        
        CLD
        REPNZ SCASB
        JNZ QUIT
        mov ax,0FFFEH
        sub ax,cx
        ret   
QUIT:
        xor ax,ax
        ret
strlen endp

StringProc ends

code segment
start:
        mov ax, data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov ax,StringPorc
        mov es,ax
        
        invoke strlen offset MSG_INFO

        mov ax,4C00H
        int 21H
code ends
end start
[local]1[/local]
1. 这几个错误要怎么改?刚学汇编不是很懂。
2. 看到有人网上可以这样分段写(像C一样),但是我这样写就报错不知道为什么。求大佬告知。
这图是我扣的网上的代码:
[local]2[/local]
感觉这样写和C都快一样了,还能传参,保存寄存器,外部在用invoke调用,但是我自己试了下(就是上面的代码)就各种报错,我看了王爽老师的那本汇编 书上也没介绍这种写法。求大佬告知这种写法的课程视频或者书。多谢!
3 回复
#2
libinden712019-11-22 00:13
附上图
只有本站会员才能查看附件,请 登录

#3
libinden712019-11-22 00:14
错误信息:
只有本站会员才能查看附件,请 登录
#4
Valenciax2019-11-23 16:54
1.
用invoke需要masm6.x以后的编译器.

2.
应该用.code, .data等伪指令指定段区.

3.
masm6.x好像并不支援used等语法.暂存器可斟酌保留.

4.
部份语法或代码作了适度修改,可自行参考

程序代码:

.MODEL  small,stdcall
.data
    MSG_INFO    db  'hello world',0

.stack 100h
.code

strlen proc near pData:WORD,pStr:WORD  
    push es
    mov ax,pData
    mov es,ax
    mov cx, 0FFFFH
    mov di,pStr
    CLD
    mov al,0
    REPNZ SCASB
    JNZ QUIT
    sub cx,0FFFEH
    neg cx
    mov ax,cx
    jmp short QUITx
QUIT:
    xor ax,ax
QUITx:
    pop es
    ret
strlen endp

start:  mov ax, @data
        mov ds,ax
        lea bx,MSG_INFO
        invoke strlen,ax,bx
        mov ax,4C00H
        int 21H
end start

1