| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 348 人关注过本帖
标题:刚学16位汇编,如何能分段写程序?
只看楼主 加入收藏
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
结帖率:63.64%
  已结贴   问题点数:20  回复次数:3   
刚学16位汇编,如何能分段写程序?
程序代码:
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调用,但是我自己试了下(就是上面的代码)就各种报错,我看了王爽老师的那本汇编 书上也没介绍这种写法。求大佬告知这种写法的课程视频或者书。多谢!
附件: 您没有浏览附件的权限,请 登录注册
搜索更多相关主题的帖子: 汇编 data mov 分段 stack 
2019-11-22 00:12
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
  得分:0 
附上图

附件: 您没有浏览附件的权限,请 登录注册
2019-11-22 00:13
libinden71
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2015-12-3
  得分:0 
错误信息:
附件: 您没有浏览附件的权限,请 登录注册
2019-11-22 00:14
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:11
帖 子:218
专家分:1443
注 册:2016-5-15
  得分:20 
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

2019-11-23 16:54
快速回复:刚学16位汇编,如何能分段写程序?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.061956 second(s), 8 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved