鱼C论坛

 找回密码
 立即注册
查看: 1560|回复: 0

默认数据段,默认栈段,默认ds和si的问题

[复制链接]
发表于 2014-12-21 08:32:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code

;data segment
;    dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;data ends;用这个数据段反而输入第45个字符时开始乱码,为什么?
;不用这个数据段反而能输入第261个字符时开始乱码,这是为什么?

code segment
start:    ;mov ax,data
        ;mov ds,ax
        ;mov si,0
        call getstr
         

getstr:    push ax;没有栈这个压入哪个栈?
getstrs:mov ah,0
        int 16h
        cmp al,20h
        jb nochar
        mov ah,0
        call charstack
        mov ah,2
        mov dh,5;起始行
        mov dl,4;起始列
        call charstack
        jmp getstrs

nochar:    cmp ah,0eh
        je backspace
        cmp ah,1ch
        je enter1
        jmp getstrs

backspace:mov ah,1
        call charstack
        mov ah,2
        call charstack
        jmp getstrs

enter1:    mov al,0
        mov ah,0
        call charstack
        mov ah,2
        call charstack
        pop ax
        ret   
     
charstack:    jmp short charstart

table dw charpush,charpop,charshow
top dw 0

charstart:    push bx
            push dx
            push di
            push es
            
            cmp ah,2
            ja sret
            mov bl,ah
            mov bh,0
            add bx,bx
            jmp word ptr table[bx]
            
charpush:    mov bx,top
            mov [si][bx],al;如果没有开始的数据段,[si][bx]中si的值从哪取数据,ds的值从哪取数据
            inc top
            jmp sret
            
charpop:    cmp top,0
            je sret
            dec top
            mov bx,top
            mov al,[si][bx];如果没有开始的数据段,[si][bx]中si的值从哪取数据,ds的值从哪取数据
            jmp sret
            
charshow:    mov bx,0b800h
            mov es,bx
            mov al,160
            mov ah,0
            mul dh
            mov di,ax
            add dl,dl
            mov dh,0
            add di,dx
            mov bx,0

charshows:    cmp bx,top
            jne noempty
            mov byte ptr es:[di],' '
            jmp sret
            
noempty:    mov al,[si][bx];如果没有开始的数据段,[si][bx]中si的值从哪取数据,ds的值从哪取数据
            mov es:[di],al
            mov byte ptr es:[di+2],' '
            inc bx
                add di,2
            jmp charshows

sret:    pop es
        pop di
        pop dx
        pop bx
        ret
            
     
     
code ends
end start


这个程序有三个问题:
1、用这个数据段在输入第45个字符时开始乱码,为什么?不用这个数据段反而能输入第261个字符时开始乱码,这是为什么?是不是有默认的数据段?
2、程序中没有设置栈段,那么入栈出栈用的哪个栈?是不是有默认的栈段?
3、如果没有使用开始的数据段,[si][bx]中si的值从哪取数据,ds的值从哪取数据?
请大家帮我看看这个程序,解释一下这三个问题,感激不尽!


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 18:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表