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
- [游客] 兄弟,现在汇编网似乎不能登录了 加油阿 12/28 17:05
- [tom7370] 兄弟,都一个月了。。。 08/16 18:12
- [tom7370] 怎么没动静了? 08/05 17:18
- [tom7370] 自愧不如啊 07/18 17:22
- [tom7370] 你的学习进度比我快多了哩 我用了将近6个月才学完这本书。。。 不像网站上说的2个月。。。。 07/18 17:20
- [mr_crbn] 啊 我佛了 这个 缩进 我在notepad++ 缩进的好好的, 07/14 14:44
- [mr_crbn] 第3题的第五小题 用到了 [bx+32] 我是实际测试过了 可以用的 就用了 其实不用这种方法 07/12 19:25
- [tom7370] 加油! 07/12 12:03
- [tom7370] 你对第二问的理解似乎不对 题目的意思大概是要你写出指令的执行过程 07/06 09:00
- [mr_crbn] 非常感谢你,我理解的确实不对 我以为一个存储器的是有固定的存储单元,笔记已经改正了 06/30 17:45
- [tom7370] 你还真是牛逼,几天就搞完我几个星期搞完的东西。 07/04 22:33