王爽老师汇编语言第四版:实验九 根据材料编程
目录
1.首先是编译问题
2.显示缓存区每一行是80个字符也就是160个字节
3.当数据想要写到第二行时 这时si已经向后走了16个位移了所以不能直接+160
应该+160-32
4.视频中教程用一个寄存器:高位存属性低位存数据(BX)
5.视频中是这样写的
下面这段代码是看完视频后自己有写了一遍的结果
写的过程中遇到的问题有:
1.首先是编译问题
前边的知识
并不是所有的寄存器都可以写到[...]里进行寻址的
可以写的有:
bx,bp,di,si
刚开始用寄存器用的不对会有提示但是看不太懂去浏览器搜了又去翻了之前的课本才找到
在课本的第八章一开始就有说明(161)
2.显示缓存区每一行是80个字符也就是160个字节
第一行是0~159
但是159放的是第158个字节的属性
第一行最后一个地址是158
根据以上推理按说是没有问题的
但是当我在dosbox中验证时却发现不对
如图用e指令修改b800:158处的地址为65(A所对应的ascll码)
但是却在第三行蹦出来一个e
这是为什么呢
后来发现就连我改内容前边的偏移地址都不对
每一行有8个字节 偏移地址应该+8才对呀但是为什么一会加8一会加2呢
后来想到了16进制
在dosbox中数据默认都是16进制的而我输入的158是十进制所以不对
包括65 十六进制的65对应的是e
还有偏移地址也是这样的
当我将158转成十六进制时9e
修改数据为41时右上角出现了A
根据视频中提示中间写的内容的偏移地址是在
注意在代码中默认是10进制
0b800h:160*10+30*2
3.当数据想要写到第二行时 这时si已经向后走了16个位移了所以不能直接+160
应该+160-32
因为16个字节还要配16个属性应该是32
4.视频中教程用一个寄存器:高位存属性低位存数据(BX)
数据都是在偶数中的属性都是基数
assume cs:code,ds:data,ss:stack
data segment;0123456789abcdefdb 'welcome to masm!' ;ds:[si]db 10001010b;绿色闪烁高亮 ;ds:[di]db 10101100b;绿底红色db 11111001b
data endsstack segment stackdb 128 dup(0)
stack endscode segmentstart: mov ax,stackmov ss,axmov sp,128mov ax,datamov ds,ax;用bx做中间容器存储属性和内容mov bx,0mov di,16mov si,0;用es:bp表示要写入的地址mov ax,0b800hmov es,axmov bp,160*10+30*2mov cx,3
duohang: push cxmov cx,16mov bh,ds:[di]hang: mov bl,ds:[si];写到这里(一行)mov es:[bp],bxadd bp,2inc siloop hangmov si,0pop cxadd bp,160-32inc diloop duohangmov ax,4C00hint 21hcode ends end start
5.视频中是这样写的
他是先将要改动的数据push保存起来进行保护
然后第二行循环的时候再拿出来
这种显然更好但是我没想出来
assume cs:code,ds:data,ss:stack
data segment;0123456789abcdefdb 'welcome to masm!' ; ds:[si]db 00000010b ;0000 0000 ds:[bx]db 00100100b ; rgb rgbdb 01110001bdata endsstack segment stackdb 128 dup(0)
stack endscode segmentstart: mov ax,stackmov ss,axmov sp,128mov bx,datamov ds,bxmov bx,0b800hmov es,bxmov si,0mov di,160*10+30*2mov bx,16mov dx,0mov cx,3
showtRow: push cxpush sipush dimov cx,16mov dh,ds:[bx]showRow: mov dl,ds:[si]mov es:[di],dxadd di,2inc siloop showRowpop dipop sipop cxadd di,160inc bxloop showtRowmov ax,4C00hint 21hcode ends end start
王爽老师汇编语言第四版:实验九 根据材料编程相关推荐
- 王爽老师汇编语言第四版第十章CALL和RET指令——小白笔记
目录 10.1 ret和retf (1) ret: (2)retf: 10.2 call指令 10.3依据位移进行转移的CALL指令 10.4 转移的目的地址在指令中的CALL指令 10.5转移地址 ...
- 实验九 根据材料编程
南京信息工程大学实验报告 实验(实习)名称 根据材料编程 实验(实习)日期 2018年12月11日 得分 指导老师 耿学华 系 计软院 专业 计科 年级 2017级 ...
- 实验九 根据材料编程(改变字体颜色)
编程:在屏幕中间分别显示 绿色.绿底红色.白底蓝色的字符串'welcome to masm!' 一个字符在屏幕上占用两个字节 低地址存放ASCII码,高地址存放字符的属性 偶数地址都是存放字符的ASC ...
- 王爽老师汇编语言实验7
目录 1.首先观察数据 定义了三个类型的数据分别是: 2.验证数据 3.将数据和寄存器绑定 前边几行代码是用来将寄存器和段地址关联起来的 4.下面我们来一个一个解决问题 (1)先把年份放到对应位置 法 ...
- 王爽《汇编语言第三版》实验10-1代码实现
;编写一个通用的子程序实现这个显示字符串的功能,提供灵活的调用接口,使调用者 ;可以决定显示的位置,内容,颜色 assume cs:code,ss:stack,ds:data data segment ...
- 王爽老师汇编第三版课程设计 一
该课程设计是在屏幕输出公司21年的详细信息,包括年份.当年总收入.当年人数.当年的人均收入(这个需要运用除法运算). 显示总收入需要解决除法溢出的问题,改进除法运算,见课本王老师的附录讲解 ...
- 王爽老师汇编语言监测点1.1
自学汇编交流学习,自己理解的不一定完全正确 1.1个cpu的寻址能力为8kb,那么它的地址总线宽度为(13) 总线宽度 计算 ...
- C语言中main函数的研究,以及对代码断点调试的研究(王爽老师 汇编语言)
版权声明:本文为博主原创文章,未经博主允许不得转载. 我们知道作为一个语言本身是不会有诸如从main函数开始运行这样的条件(深层次的说 底层汇编代码不会指定从mian函数开始的这样的条件,程序开始的位 ...
- 自学王爽老师汇编语言 检测点6.1
自学汇编,讨论学习,不对之处请指出共同学习,不喜勿喷 1,下面的程序实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序: assume cs:codecode segmentdw 0 ...
最新文章
- 中石油大学计算机二在线作业答案,中国石油大学计算机应用基础第二阶段在线作业答案2018年.doc...
- main 函数的标准原型
- Python os.makedirs详细介绍
- OSChina_IOS版客户端笔记(四)_程序数据、缓存的管理
- 【NOIP2004】【Luogu1090】合并果子
- 高性能网络编程(二):上一个10年,著名的C10K并发连接问题
- daemontools安装和使用
- textpattern 在 nginx 上的 rewrite 规则
- 计算机鼠标左键不起作用,电脑鼠标左键不能用怎么办
- 近日,软件项目管理高峰论坛成功召开,项目管理平台发布正式亮相……
- System.Activator类
- clustream java_数据流聚类算法
- Android Studio文本编辑框EditText
- 微信扫码登录,微信公众号生成二维码,关注登录nodejs+vue
- c语言程序压缩解压缩文件夹,【转】使用VC++压缩解压缩文件夹
- 【微服务】165:导入数据到索引库
- 什么是UUID 以及UUID的版本
- C语言多线程之“哲学家就餐”问题
- springcloud:访问/bus/refresh地址后出现错误,,client端出现以下错误
- 电视剧植入式广告的植入方式有哪些