
汇编语言
Sky ~ Komori
我要在ICPC拿奖
展开
-
实验1 查看CPU和内存,用机器指令和汇编指令编程
前言:楼主最近忙期末考没弄题目了,复习到汇编指令的时候发现之前的实验可以重新做一做,又想起了之前学汇编的时候感谢各位大大的博客,所以小弟也来弄一次实验博客,希望可以帮到大家(鉴赏作业,偷笑)orz实验任务:1、使用debug,将下面程序段写入内存,逐条执行,观察每条指令执行后CPU中相关寄存器内容的变化 将汇编指令写入到076a:0000这个位置 修改CS:IP指令,并用u查看一下汇编指令逐条...原创 2018-06-16 11:03:27 · 5032 阅读 · 1 评论 -
实验11 编写子程序
分析:这次试验难度已经大大下降,个人感觉;只是要你熟悉cmp的用法,对比好a和z后就将这个字母的第5位变为0就可以了assume cs:codesgdatasg segment db "Beginner’s All-Purpose Symbolic Instruction Code.",0datasg endscodesg segmentbegin: mov ax,datasg ...原创 2018-06-18 21:28:51 · 579 阅读 · 0 评论 -
实验10 编写子程序3数值显示
编程,将data段中的数据以十进制形式显示出来这道题目是三道题目之中最难的一道题,当然前面两道题目如果能理解了的话这道题目是不成问题的,show_str是可以复制前面的。有点不同的是你保存字符串的数据区是6 6 6 2 1这样保存的,我们要倒过来录入。所以在录入后判断si是否为0就ok了。assume cs:codedata segment db 10 dup(0)data ends...原创 2018-06-18 20:24:52 · 579 阅读 · 0 评论 -
实验10 编写子程序2解决除法溢出的问题
分析:前面大概都能看懂,主要书那个公式是怎样分析出来的,理解后代码就很简单了。好比如一个最大存99的数,你要计算1012/3;先拿出10/3 = 3;注意这个就是余数的最高位然后剩下(1*100+12)/3,不用说,这个就是低位,你可以笔算来模拟一下你是怎样算出1012/3你就知道我说啥了。他为什么会有65535这个数字,其实就是ax寄存器最大的数值。公式X/N中,int那部分就是除数的高位,那么...原创 2018-06-18 11:24:09 · 346 阅读 · 0 评论 -
实验10 编写子程序1显示字符串
分析:这个程序用到了这章大部分知识,请仔细阅读本章内容。还有用到了上一个实验的知识点。如果你了解了以上两点,这道题目将很容易就敲出来了。需要知识点:(书上都有)1、行和列的计算和颜色的了解2、jcxz的用法3、call和ret的用法4、怎样判断0assume cs:codedata segment db 'Welcome to masm!',0data endscode segment...原创 2018-06-18 10:53:07 · 888 阅读 · 0 评论 -
实验9 根据材料编程
编程:在屏幕中间分别显示绿色,绿底红色、白底蓝色的字符串‘welcome to masm!’。估计材料这么长(~ ̄(OO) ̄)ブ大家都没啥耐心去看,我总结了一下。1、在内存区B8000H~BFFFFH区间中写入数据会显示在显示器上,还记得实验1的时候的图案吗。2、显示器可以显示25行,每行80个字符。3、一个字符要占2个字节,分别存放字符的askll码和属性(颜色啊等等)4、显示区可分为8页。而第...原创 2018-06-18 10:00:05 · 726 阅读 · 0 评论 -
实验8 分析一个奇怪的程序
分析:assume cs:codesgcodesg segment mov ax,4c00h int 21h start: mov ax,0s: nop nop mov di,offset s mov si,offset s2 mov ax,cs:[si] mov cs:[di],axs0: jmp short ss1: mov ax,0 int 21h mo...原创 2018-06-17 11:31:22 · 810 阅读 · 0 评论 -
实验7 寻址方式在结构化数据访问中的应用
分析:该实验时之前以来最难的一次试验了,很多第一次都是难以做出来的(大神别见怪。我们先分析一下数据段,前两个其实都是4个字节,别被db给骗了,因为是字符串,所以4个字节然后dw为两个字节,你会发现前两个的某个地址为dw地址的两倍。比如1976的地址为4,对应22,但是对应dw中的7地址却为2. 这个时候我们就可以用bx设置为dw的起始地址,然后si+bx为前面两个的起始地址就行了 (si+b...原创 2018-06-17 10:50:16 · 663 阅读 · 0 评论 -
实验6 实践课程中的程序
2、编程,完成问题7.9中的程序这里就直接贴出代码了。其实就是运用基址变址来使自己的位置不停变化,只要能徒手敲出实验6.1的问题,6.2也就没有问题了。assume cs:codesg,ss:stacksg,ds:datasgstacksg segment dw 0,0,0,0,0,0,0,0stacksg endsdatasg segment db '1. display ...原创 2018-06-17 09:34:18 · 1133 阅读 · 0 评论 -
实验5 编写、调试具有多个段的程序
这个实验开始的填空题我就不写了,想看的引入别人的文章:点击打开链接解释一下三个填空题目的区别:1和2的区别就是无论你的段申请够不够16个字节,计算机都会帮你直接申请够一行,也就是16个字节。所以第2题最后一个填空题答案为((n/16)+1)*16 其中(n/16)就是判断你申请的有木有超过一行,因为会去掉小数,所以要加上1,最后乘回16就是答案2和3的却别就是你定义的段在不同位置,他们开始的...原创 2018-06-16 20:46:32 · 1132 阅读 · 0 评论 -
实验4 [bx]和loop的使用
1、编程、向内存中0:200~0:23f依次传送数据0~63(3FH)分析:0~63要循环64次,然后就是导入ds,bx,cx,很简单的一个程序assume cs:codesgcodesg segment mov ax,0 mov ds,ax mov bx,200h mov cx,64 ;循环64次s: mov [bx],ax inc ax inc bx loop s...原创 2018-06-16 20:05:58 · 568 阅读 · 0 评论 -
实验3 编程、编译、链接、跟踪
1、将下面的程序保存为t1.asm,将其生成可执行未见,t1.exeassume cs:codesgcodesg segment mov ax,2000h mov ss,ax mov sp,0 add sp,10 pop ax pop bx push ax push bx pop ax pop bx mov ax,4c00h int 21hcodesg end...原创 2018-06-16 19:29:10 · 1458 阅读 · 0 评论 -
实验2 用机器指令和汇编指令编程
预备注意点:debug的t命令在执行修改寄存器ss的指令时,下一条指令也会被执行,建议下一条指令为修改ip。1、使用debug,将下面程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。先将命令打入076a:0000位置,并且修改cs和ip逐条执行,并且填空(填空就不写了)2、分析,为什么2000:0~2000:f中的内容会发生改变估计刚开始也是什么都看不懂,完全不知道为啥会有数据,数据是...原创 2018-06-16 19:01:33 · 2531 阅读 · 0 评论 -
实验12 编写0号中断的处理程序
结语:这是我写汇编的最后一个实验了。从一开始的思想到后来感觉写个程序其实都是理想当然的,解释也越来越少。相信大家做到这里的时候实力都比我强了吧つ﹏⊂分析:该试验包含了12章的所有内容。其实12章就是教我们怎样写出这个程序的。包括do0的妙用(重点)和怎样设置一个中断。这个程序只需要改变一下cx的长度和字符串就ok了安装的程序:assume cs:codecode segment start:...原创 2018-06-19 09:44:42 · 537 阅读 · 0 评论