回 帖 发 新 帖 刷新版面

主题:估计是栈的设置带来的问题

要求查找某个字符在字符串内的个数,还没编完就出问题了
程序如下
assume cs:code, ss:temp
strbuf segment
    db 'ASASASAS' 
strbuf ends

string segment
    db 'AS'
string ends

temp segment
    dw 0
temp ends

code segment
start:
    mov ax,strbuf
    mov ds,ax       ;设ds
    mov ax,temp
    mov ss,ax
    mov sp,2        ;设ss
    mov cx,8
s:
    push cx
    mov ax,string
    mov es,ax
    mov cx,es:[0]    ;'AS'入cx
    sub cx,[bx]
    
    loop s
    
    mov ax,4c00h
    int 21h
    
code ends
end start

在 mov cx,8这句跳出无法执行的指令
若把sub cx,[bx]这句删了debug时在mov cx,8后又不设断点了。。。。

达人指教啊

回复列表 (共4个回复)

沙发

你的意思我还不怎么明白 你能不能讲得更清楚一点呀 
我觉得你这里用段组定义要更好一些,不过你的程序还没有写完,不知道到底哪里不对,这个只是供你参考

strbuf segment byte public 'data'
    db 'ASASASAS' 
strbuf ends

string segment byte public 'data'
    db 'AS'
string ends

temp segment
    dw 0
temp ends

strbuf1 group string,strbuf

code segment
     assume cs:code, ss:temp,ds:strbuf1
start:
    mov ax,strbuf1
    mov ds,ax       ;设ds
    mov ax,temp
    mov ss,ax
    mov sp,2        ;设ss
    mov cx,8
s:
    push cx
    mov ax,string
    mov es,ax
    mov cx,es:[0]    ;'AS'入cx
    sub cx,[bx]
    pop cx
    loop s
    
    mov ax,4c00h
    int 21h
    
code ends
   end start

板凳

用段组的确比较好,不过问题还没有解决,ls的可以debug一下,就清楚了。(嘿嘿,偶比较懒)。我现在的做法是自己给出一段安全的空间0:200~300做栈,不过仍想由
编译器分配一个栈,,怎么办呢?

3 楼

编译器分配一个栈,你可以在前面定义一个堆栈段,如
stack segment 'staxk'
  64 dup(?)
stack ends
这样在编绎时系统就会自动分配一个栈给你了

4 楼

我一开始是
stack segment
dw 0
stack ends

但将cx值push后debug时发现直接运行了int 21H

我来回复

您尚未登录,请登录后再回复。点此登录或注册