qnapjiujiu 发表于 2014-12-21 08:32:35

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

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
            
charpush:    mov bx,top
            mov ,al;如果没有开始的数据段,中si的值从哪取数据,ds的值从哪取数据
            inc top
            jmp sret
            
charpop:    cmp top,0
            je sret
            dec top
            mov bx,top
            mov al,;如果没有开始的数据段,中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:,' '
            jmp sret
            
noempty:    mov al,;如果没有开始的数据段,中si的值从哪取数据,ds的值从哪取数据
            mov es:,al
            mov byte ptr es:,' '
            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的值从哪取数据,ds的值从哪取数据?
请大家帮我看看这个程序,解释一下这三个问题,感激不尽!

页: [1]
查看完整版本: 默认数据段,默认栈段,默认ds和si的问题