当前位置: 代码迷 >> 汇编语言 >> 《汇编语言》第9章实验9的有关问题
  详细解决方案

《汇编语言》第9章实验9的有关问题

热度:5581   发布时间:2013-02-26 00:00:00.0
《汇编语言》第9章实验9的问题
题目是在屏幕中间分辨显示绿色,绿底红色,白底蓝色的字符串“welcome to masm!”先不考虑能不能在屏幕中间输出的问题,编译能通过,但是用debug调试的时候t命令执行到mov ss,ax下一句CS和IP寄存器就会有很大改动,本应该是mov bp,0的,但是却不知道跳到什么地方去执行了,指令根本不对。我试过把CS和IP寄存器用r命令改回来,但是还是一样,用t命令执行下一句就会直接退出debug不知道是什么回事,不知道是不是我代码有问题
Assembly code
assume cs:codedata segmentdb 'w','e','l','c','o','m','e',' ','t','o',' ','m','a','s','m','!'data endscode segment  R:mov ax,data    mov ds,ax    mov bx,0    mov ax,0b800h    mov ss,ax    mov bp,0    mov cx,16  s:mov ah,10b    mov al,[bx]    mov ss:[bp],ax    add bp,2    inc bx    loop s    mov bx,0    mov bp,0a0h    mov cx,16 s1:mov ah,100100b    mov al,[bx]    mov ss:[bp],ax    add bp,2    inc bx    loop s1    mov bx,0    mov bp,140h    mov cx,16 s2:mov ah,1110001b    mov al,[bx]    mov ss:[bp],ax    add bp,2    inc bx    loop s2    mov ax,4c00h    int 21hcode endsend R


------解决方案--------------------------------------------------------
我调试是debug直接退出了~应该堆栈问题,ss指向0b800,sp为0,入栈第一个的位置是fffe,而字符显存的位置是b8000~bffff,只有8000H大小,fffe显然超了,bffff后面是只读区~
------解决方案--------------------------------------------------------
ss指向0b800,sp为0, 试着设置下sp的值看看结果如何。怎么可以忘设置堆栈大小呢?
------解决方案--------------------------------------------------------
请不要在程序中使用SS寄存器来当做数据段寄存器来使用,请注意SS是堆栈段寄存器,在程序中需要设置堆栈的时候,才能改变SS的值,同时一般也要设置SP的值来设置堆栈栈顶.

堆栈是个重要的内存区域,程序运行期间,有许多数据会被(自动)放到堆栈中.

源程序中,把SS换成ES就可以了.
  相关解决方案