汇编网首页登录博客注册
mr_crbn的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
文章收藏

[2019-07-14 22:35] 汇编语言实验九 这个实验我自己 琢磨了4个小时 现在真的头晕眼花的

assume cs:code

data segment
db 'welcome to masm!' ;0~~15
db  2h,24h,71h
data ends

stack segment
dw '0'
stack ends
code segment
start:mov ax,data
mov ds,ax ;初始化data
          
mov ax,0B800h
mov es,ax ;初始化es
          
mov ax,stack
mov ss,ax
mov sp,0;初始化栈
          
mov bp,0;屏幕的偏移 行! 这个决定了字符是否分行显示
mov bx,0;表示data数据的偏移
          
mov cx,3;循环3次
mov di,16 ;颜色的偏移  
mov si,0 ;屏幕的偏移 列 这个决定了 字符能完整的显示出来
s:
push cx ;先压栈 把数据3压栈
mov cx,16;再重新设置cx的值为16 表示循环16次
        
s1:mov al,ds:[bx];读取ds:[dx]内存单元的数据到al读取一个字节

mov es:[bp+si],al;将al的数据写到 屏幕上 bp表示第一行 si表示第一行的第几个字节

inc si ;上个字节写的是ascll码值 这个 字节写的是颜色

mov al,ds:[di];读取 存放在段里面的颜色的数据
mov es:[bp+si],al;将颜色写进去 组成一个字符 (有颜色的那种)

inc si;偏移继续加1 因为需要写在下一列        
inc bx;指向data数据中的下一个字节
loop s1 ;cx-1循环16次数 刚好写完一行
mov bx,0;bx置0,因为数据代码全是一样的 所以只需要一行
add bp,80h;bp加80h表示进入下个行
inc di ;颜色的偏移加1 表示指向下个颜色
pop cx;存入的数据出栈 , 继续把值赋值给cx cx判断 是否继续循环
loop s
all: jmp short all
mov ax,4c00h
int 21h
code ends
end start
评论次数(0)  |  浏览次数(537)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码