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

 我来答
百度网友f6753a1fd
2011-07-28 · TA获得超过821个赞
知道小有建树答主
回答量:294
采纳率:0%
帮助的人:391万
展开全部
; ============================================================================================
;
; 王爽汇编实验9 根据材料编程
; 要求:编程实现在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串 'welcome to masm!' .
; 在80*25彩色字符模式下,显示器可显示25行,每行80个字符,每个字符可以有256种属性
; 02H表示黑底绿色
; 00100100B表示绿底红色
; 01110001B表示白底蓝色
;
; ============================================================================================

assume cs:codesg,ds:datasg,ss:stacksg

datasg segment
db 'welcome to masm!',0
datasg ends

stacksg segment

stacksg ends

codesg segment

start: mov ax,datasg
mov ds,ax

mov ax,0b800h
mov es,ax ; es初始化为视频缓冲区段地址

; 第一步,计算出屏幕中间的位置
; 书上给出的资料为:一个屏幕共显示25行,每行80个字符(160字节)
; 偶数字节放字符,奇数字节放字符属性
; 待显示的字符串长度为16个字节,算作16个字符
mov ax,12 ; 第13行
mov bx,160
mul bl ; 计算出前12行共多少字节,结果在ax中
add ax,64 ; 之所以加上64个字节是因为(160-16*2)/ 2=64 字节
; 这样才能保证字符串正好居中
mov di,ax ; 将结果放到目的地址寄存器中,配合es指向视频缓冲区中的目的位置
mov si,0 ; 初始化源地址寄存器,指向数据段中的源字符串

call ShowString ; 调用显示字符串的子程序

mov ax,4c00h
int 21h

ShowString:
mov cx,7

; 显示绿色的welcome
loop1:
mov al,[si]
mov es:[di],al
mov byte ptr es:[di+1],02h
inc si
inc di
inc di
loop loop1

; 显示welcome后的空格
mov al,[si]
mov es:[di],al
inc si
inc di
inc di

mov cx,2
; 显示绿底红色的to
loop2:
mov al,[si]
mov es:[di],al
mov byte ptr es:[di],00100100B
inc si
inc di
inc di
loop loop2

; 显示to后的空格
mov al,[si]
mov es:[di],al
inc si
inc di
inc di

mov cx,4
; 显示白底蓝色的masm
loop3:
mov al,[si]
mov es:[di],al
mov byte ptr es:[di+1],01110001B
inc si
inc di
inc di
loop loop3

; 显示最后的!
mov al,[si]
mov es:[di],al

ret
codesg ends

end start
; 结果还是在cmd全屏模式下才能看到!!!
weicaihui2008
2011-07-27 · TA获得超过215个赞
知道小有建树答主
回答量:367
采纳率:100%
帮助的人:216万
展开全部
问题详细点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式