有关汇编实验9.9的随笔
此实验对于本人来说难点有四个:1.阅读的材料很长,但是基本全是干货.2.对于各个寄存器转移的是字节还是字不够明确.3.在编程中的逻辑不够顺畅,4.汇编基本共不扎实.此实验不是我本人独立完成,看了网上鱼C的视频讲解和一些稳炸过以后完成的.
由于时间关系我只能熟悉汇编,看得懂汇编的代码,为后面的微机原理做准备,故在这个时间段内不会对汇编进行深究。希望以后的我看到此段话语明白自己学的很不好,若工作生活中用到汇编请重新好好在学习一遍!
1.对于材料:要求:在屏幕中央输入:“welcome to masm!”,这个字符串在屏幕中央字体和字体背景有不同的颜色。字体和字体北京称为字符串的属性,属性被记录在属性字节当 7 6 5 4 3 2 1 0
中。属性字节的格式为: 含义:BL R G B I R G B 需要哪个属性哪个属性对应的比特位就为1.如红底绿字:0100_0000B.
闪烁 背景 高亮 前景
既然是显示,就要将其送入显存中.显存的空间为:B8000H-B8F9FH.占据整个显示屏的25行,内行有160个字节。所以通过简单的数学计算,在屏幕中间的应该是第12,13,14行,第12行中第80个字节,即为第11*160+64个字节。换算成16进制为720.所以储存位置为:0B8000h+720H=0B8720H.我们将这个当作段地址.将字符串和字符串的属性送入该段地址之后的地址即可完成题目要求.
2.想法如下:
i).需要三个寄存器一个保存字符串的字节,一个保存字符串属性的字节,一个负责接收字符串加属性(字节加字节就是一个字)。
ii)利用循环一个一个送进去
iii)完成一个以后,完成剩下两个。
3.代码如下:
assume cs:code
data segment
db 'welcome to masm!' ;定义每个字母为一个字节
db 02H,24H,71H ;定义字符串的属性,这里将二进制的属性转换为16进制。如02h就是绿色
data ends
stack segment
dw 0,0,0,0,0,0,0,0 ;定义16个字节的栈空间
stack ends
code segment
start: mov ax,data ;无脑先把data地址数据送进ax寄存器
mov es,ax ;将data段地址送进段寄存器es
mov ax,0872h ;屏幕中间的地址
mov ds,ax ;将屏幕中间的地址送进段寄存器ds
mov si,0 ;索引es里面的字符串数据(是字节)
mov di,16 ;索引es里面的字符属性数据(是字节)
mov bx,0 ;是ds里面的偏移地址,用来将es中的数据传递到ds中也就是B8720H段地址后面的地址当中
mov ax,stack ;将栈的段地址传递给寄存器ax
mov ss,ax ;将stack栈的段地址传给ss
mov sp,16 ;指向栈底,注意我们定义的占空间是16个字节(0-15byte)又因为此时栈为空,所以sp应该出栈,指向16
mov cx,3 ;这里的cx是后加的,先完成的内循环,即完成第一个的“welcome to masm!”的上色和屏幕输出,然后外循环三次,在外循环中修改内循环的属性
s:push cx ;将cx送进栈保护起来,防止其值被内循环破坏
mov cx,16 ;内循环16次,因为“welcome to masm!”是十六个字节
s0: mov al, es:[si] ;将si中的字传送给ax,因为我使用的是小段机器,在机器中welcome to masm!是按照从低到高的顺序进行储存的,所以第一次传送的是we,但是小端w 会被留下,大端的e会被丢弃.
mov ah, es:[di] ;这里也可以直接改写成si+16.同理由于是小端机器,这里只需要一个字节,传送的字的大端会被丢弃
mov ds:[bx],al ;将al中的数据传递给[bx],[bx]能储存一个字,这里将al传递给bx字中的低位字节部分[bx]指向储存单元0(低位)和1(高位)
mov ds:[bx],ah ;将ah中的数据传递给[bx+1],这里将ah传递给[bx+1]字中的低位字节部分,[bx+1]指向储存单元1(低位)和2(高位)
inc si ;si低位指向下一个字节
add bx,2 ; 注意这里的bx应该加2,因为bx需要指向的是下一个字
loop s0 ; 至此将一个完整的字符串和其一个固定的属性送进了显存之中
pop cx ;赶紧把c栈中的x拿出来
inc di ;di低位指向下一个字节,改变字符串的属性
mov bx,80h ;160-16=148,148用十六进制表示为80h送入屏幕下一行的中间
loop s ;完成三次循环
mov 4c00h
int 21h
code ends
end start
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!