首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-08-27 
《汇编语言》第9章实验9的问题题目是在屏幕中间分辨显示绿色,绿底红色,白底蓝色的字符串“welcome to masm!”

《汇编语言》第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就可以了.

热点排行