汇编语言王爽实验9(汇编语言显示缓存区的内容怎么显示)

2024-08-24 00:40:06 :15

汇编语言王爽实验9(汇编语言显示缓存区的内容怎么显示)

大家好,今天小编来为大家解答以下的问题,关于汇编语言王爽实验9,汇编语言显示缓存区的内容怎么显示这个很多人还不知道,现在让我们一起来看看吧!

本文目录

汇编语言显示缓存区的内容怎么显示

首先你要知道,当你把字符对应的ASCII码写入显示缓冲区的时候它就会被屏幕所显示出来。显示缓冲区一共有8页(这里只用第一页就够了,所以我就提一下)每页的可以存储2000个字,一个字的高位存放的是需要显示的字符,低位存放的是字符的颜色也就是说一页最多显示2000个字符了 比如说 0位:41,1位:02 这里41所在的位是0位(偶数位)所以它将被转换成对应的字符显示在屏幕上 而紧跟0位后面的是奇数位(1位),它里面的内容会转换成控制0位字符和背景等颜色信息,以后的都是这样,比如第2位和第3位配对,第4位和第5位配对,第4位是字符信息,第5位就是控制第4位字符信息的颜色。而每行可以放80个字,也就是80个字符(字符位+颜色位=160个字节),而每页又可以显示25行我们可以用 行数*160=内存中相对于行数所在的地址(因为一行是160个字节,所以乘以160)我们可以用 列数*2=内存中相对于列数所在的地址 (因为每行用2个字节分别存放字符和颜色)如果说用SI存放行数,DI存放列数,而你需要在屏幕的第13行40列显示数据的时候,它的偏移地址就是:si*160+di*2(这个是字符存放的位置),如果你要设置颜色的话 只要向后面偏移一位就可以了:si*160+di*2+1说了这么多,我来写个具体的给你看看吧,不会的看我写的备注需要向屏幕的 13行40列显示字符X,颜色为(黑底绿色)assume cs:codecode segmentstart: mov bx,0b800h mov es,bx ;用ES段存放显示缓冲区 mov bx,13*160+40*2 ;在编译的时候编译器会帮你计算出显示的偏移地址 mov es:,’X’ ;在显示缓冲区的内存中写入字符’X’的ascii码 mov es:,2h ;这里向后移一位,控制‘X’的颜色 mov ax,4c00h int 21hcode endsend start回答完毕 QQ544980123 一起交流

王爽《汇编语言》检测点9.3的一道题

2000:0段的内存为0B 0E 00 01时,当bx=2时,mov cl,mov ch,0后,cx=0;执行inc cx和inc bx后,cx=1,bx=3,loop s语句执行后退出循环。接着执行OK标号处的程序。因bx比真正的偏移地址多加了1,故OK标号处先将bx减1再存储在DX中

汇编语言实验9跪求详细解答我在网络上看到答案,但就是看不懂!谢谢

; ============================================================================================; ; 王爽汇编实验9 根据材料编程; 要求:编程实现在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串 ’welcome to masm!’ .; 在80*25彩色字符模式下,显示器可显示25行,每行80个字符,每个字符可以有256种属性; 02H表示黑底绿色; 00100100B表示绿底红色; 01110001B表示白底蓝色; ; ============================================================================================assumecs:codesg,ds:datasg,ss:stacksgdatasg segmentdb’welcome to masm!’,0datasg endsstacksg segment stacksg endscodesg segment start:movax,datasgmovds,axmovax,0b800hmoves,ax; es初始化为视频缓冲区段地址; 第一步,计算出屏幕中间的位置; 书上给出的资料为:一个屏幕共显示25行,每行80个字符(160字节); 偶数字节放字符,奇数字节放字符属性; 待显示的字符串长度为16个字节,算作16个字符movax,12; 第13行movbx,160mulbl; 计算出前12行共多少字节,结果在ax中addax,64; 之所以加上64个字节是因为(160-16*2)/ 2=64 字节; 这样才能保证字符串正好居中movdi,ax; 将结果放到目的地址寄存器中,配合es指向视频缓冲区中的目的位置movsi,0; 初始化源地址寄存器,指向数据段中的源字符串 callShowString; 调用显示字符串的子程序movax,4c00hint21hShowString:movcx,7; 显示绿色的welcomeloop1:moval,moves:,almovbyte ptr es:,02hincsiincdiincdilooploop1; 显示welcome后的空格moval,moves:,alincsiincdiincdimovcx,2; 显示绿底红色的toloop2:moval,moves:,almovbyte ptr es:,00100100Bincsiincdiincdilooploop2; 显示to后的空格moval,moves:,alincsiincdiincdimovcx,4; 显示白底蓝色的masmloop3:moval,moves:,almovbyte ptr es:,01110001Bincsiincdiincdilooploop3; 显示最后的!moval,moves:,alretcodesg endsend start; 结果还是在cmd全屏模式下才能看到!!!

win7 汇编(编译连接结果却显示不了)的问题

可能是编译器的问题,有些和win7不兼容,我以前就遇到过,在机房xp系统上编译运行良好的程序拿回自己的win7上就不行了,后来我换了个编译器就好了

王爽汇编语言 的实验9我按照书上的代码运行,但是都显示不出来,不知道是不是系统的问题,我的是win7系统

兄弟,我也遇到过这个问题,不用纠结了,解决方案是装DosBox。我做实验9的时候在win7下无论怎么做也没有任何显示,但是一转到在DosBox下跑,马上出效果了!

王爽汇编语言第二版 实验9 的问题,屏幕第一行的地址是多少

用DEBUG操作,有时光标会赶上是在最下面。这时,每次操作,整个屏幕,自动向上滚动一行。那么,你在写入0A0~13F的内容,就显示在第一行了,原来的000~09F的内容,就滚动没了。

王爽 汇编语言 实验9 为什么我的程序运行后只显示了一行文字请高人指点!谢谢!

mov bx,0要在循环外面,不然从数据段读的永远是welcome to masm!寻址是es会乘上10h,所以只要加上0ah就行了..start:mov ax,datamov ds,axmov ax,stackmov ss,axmov sp,10hmov ax,0B86Eh ;es段地址是屏幕中间行的首地址mov es,axmov ax,0mov cx,3 ;外循环3次每次写一行mov bx,0 ;mov bx,0要在循环外面,不然从数据段读的永远是welcome to masm! s:push cx ;保存cx的值mov si,cx ;利用cx的值在data中索引字符颜色属性mov ah,mov cx,16 ;内循环16次写入16个字符和属性mov di,46h ;字符在中间那行的偏移地址 s1:mov al,mov es:,axadd di,2inc bxloop s1pop cx ;取出外循环cx的值mov dx,es ;es段地址加0a0h指向下一行的首地址add dx,0ah ;寻址是es会乘上10h,所以只要加上0ah就行了mov es,dx loop smov ax,4c00hint 21h

关于汇编语言王爽实验9和汇编语言显示缓存区的内容怎么显示的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

汇编语言王爽实验9(汇编语言显示缓存区的内容怎么显示)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.