王爽《汇编语言》课后实验报告
文章平均质量分 81
FibonacciCode
因为热爱而坚持,因为坚持而卓越
展开
-
实验14:访问CMOS RAM显示当前日期和时间
下面的代码实现的功能是实时的显示时间,显示的效果就如同一个电子时钟,这个代码来自于“网易云课堂”讲汇编的一位老师(从0开始,讲的非常的好),这段代码老师写的太好了,贴在下面学习效仿一下:assume cs:code, ds:data, ss:stackdata segment db 128 dup(0)data endsstack segment stack db 128 dup原创 2017-09-18 21:10:17 · 1632 阅读 · 1 评论 -
实验4 [bx]和loop的使用
(1)assume cs:codesgcodesg segment mov ax, 0 mov ds, ax mov bx, 200H ;ds:bx数据区 mov cx, 40h mov dl, 0s: mov ds:[bx], dl ;dl中间变量 inc bx inc dl loop smov ax, 4c00hin原创 2017-09-02 12:39:26 · 1389 阅读 · 0 评论 -
实验9 根据材料编程
本实验关注的重点是如何显示一个二维的数据,很自然是使用二重循环,汇编二重循环也有一个套路,具体看下面的代码,几乎所有的二重循环都是下面这个套路。值得强调的是,两层循环直接进出一定要注意上下文切换,这里已经体现出一点操作系统指令切换的雏形。assume cs:codesg, ds:datasgdatasg segment db 'welcome to masm!', 0 db 0原创 2017-09-10 07:48:40 · 511 阅读 · 0 评论 -
实验8 分析一个奇怪的程序
仔细阅读9.3节依据位移进行转移的jmp指令,然后理解下面的这个很奇怪的程序就容易多了,当然要看着机器码去分析。assume cs:codesgcodesg segment mov ax, 4c00h int 21hstart: mov ax, 0s: nop nop mov di, offset s mov si, offset s2 mov ax, cs:[si]原创 2017-09-09 21:25:08 · 1115 阅读 · 0 评论 -
实验3 编程、编译、链接、跟踪
本章的核心知识点在4.9节,王爽老师讲的特别清楚明白,多读几遍,跟着多做几遍,增加对底层的感觉;本实验的目的是明白4.9节所讲的东西,具体点如下:1,command,debug,t1.exe之间是什么关系?command调用debug,debug调用t1;t1结束时返回到debug,debug结束时返回到command;2,debug调试常用的命令?t--执行当原创 2017-08-31 22:24:21 · 664 阅读 · 0 评论 -
实验7 寻址方式在结构化数据访问总的应用
做本实验时明显感觉寄存器不够用,所以要对bx,si,di,bp的使用仔细阅读,本题比较琐碎,做本题更需要的是耐心,耐心,耐心。assume cs:codedata segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986原创 2017-09-09 21:03:03 · 425 阅读 · 0 评论 -
实验6 实践课程中的程序
本实验书中已经有源码(158页),稍微改动一下即可。本题中值得学习的地方就是用双重循环遍历二位数组,这在C语言中很简单,但是在汇编中要注意cx的在内外层循环之间的切换情况。assume cs:codesg, ds:datasg, ss:stacksgdatasg segment ;0123456789abcdef db '1. display ' db '2. br原创 2017-09-09 19:53:28 · 1009 阅读 · 0 评论 -
实验13 编写、应用中断
int指令的最终功能和call指令类似,都是调用一段程序两者的根本区别表现在服务时间和服务对象上不一样。(本段叙述参考原文:http://blog.csdn.net/jxq0816/article/details/50121563)1)调用子程序发生的时间是已知的和固定的,即在主程序的调用指令(CALL)执行时发生主程序调用子程序过程,调用指令所在位置是已知的和固定的;而中断过程发生的时间原创 2017-09-17 09:55:13 · 792 阅读 · 0 评论 -
实验12 编写0号中断的处理程序
1,在地址0:200h处安装中断代码,安装程序如下:assume cs:codesgcodesg segmentstart: mov ax, cs mov ds, ax mov si, offset do0 ;设置ds:si指向源地址 mov ax, 0 mov es, ax mov di, 200h ;设置es:si指目的地址 mov cx, offset原创 2017-09-17 08:52:51 · 968 阅读 · 0 评论 -
实验11 编写子程序
本章知识很琐碎,原则是用哪查哪,无需记忆。设置标志寄存器的意义在于:(1)用来存储相关指令的某些执行结果;(2)用来为CPU执行相关指令提供行为依据;(3)用来控制CPU的相关工作方式。好了知道这三点就可以开始试验11了。代码如下:assume cs:codesgdatasg segment db "Beginner's All-purpose Symbolic原创 2017-09-16 07:07:48 · 502 阅读 · 0 评论 -
实验16 编写包含多个功能子程序的中断例程
本实验是本书的第二个精华的实验。到此可以总结,汇编的重点在于跳转,这里的跳转包括jmp,call(调用),int(中断),这反映到操作系统上就是调用,线程、进程的切换,跳转的本质是任务的切换,CPU的并行就是通过指令切换完成的,所以汇编是操作系统的基础。再说跳转,那就涉及到程序放在哪里,怎样把指令指到想执行的程序上?分为两种情况:一是不安装程序,这种情况比较好办,通过offset直接可以定位到程序原创 2017-09-24 06:49:18 · 580 阅读 · 0 评论 -
实验10 编写子程序
1,显示字符串assume cs:codesg, ds:datasgdatasg segment db 'hello, world', 0datasg endscodesg segmentstart: mov dh, 14 mov dl, 40 mov cl, 2 mov ax, datasg mov ds, ax mov si, 0 ;si point to dat原创 2017-09-10 08:42:39 · 1734 阅读 · 0 评论 -
实验15 安装新的int 9中断例程
这个实验综合了外中断,内中断,应该是全书最精华的一个实验,常常思考整个程序的流程,指导这个流程觉得熟悉、自然。代码如下:assume cs:code, ss:stackstack segment db 128 dup(0)stack endscode segmentstart: mov ax, stack mov ss, ax mov sp, 128 push cs原创 2017-09-22 21:34:34 · 570 阅读 · 0 评论 -
实验5 编写、调试具有多个段的程序
本章实验的主题主要讲代码段、数据段、栈段的使用。(1)assume cs:code, ds:data, ss:stackdata segment dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987hdata endsstack segment dw 0, 0, 0, 0, 0, 0, 0, 0stack ends原创 2017-09-02 13:22:12 · 2846 阅读 · 0 评论