汇编语言第四版-王爽
王爽著汇编语言课中监测点及实验记录
星辰大Hai
这个作者很懒,什么都没留下…
展开
-
王爽《汇编语言》(第四版)第十七章 实验17
实验要求安装一个新的 int 7ch 中断例程,然后将传入的 逻辑扇区号 转化为 int 13h 中断例程需要的入口参数,逻辑扇区号 算出物理编号的算法已经给出,基本是除法操作。debug跟踪,观察代码指令int 7ch执行前后ax寄存器中的值。原创 2024-07-12 13:53:39 · 372 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十七章 检测点17.1
在 int 16h 中断例程中,一定有设置 IF=1 的指令。原创 2024-07-12 11:28:08 · 407 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十六章 实验16
编写多个功能子程序的中断例程直接上代码assume cs:codecode segment start: mov ax,cs mov ds,ax mov si,offset int7chstart mov ax,0 mov es,ax mov di,200h ;复制7ch中断例程至0:[200h] mov cx,offset int7chend-offset int7chstart cld rep movsb ;设置中断向量表 cli原创 2024-07-12 10:44:19 · 492 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十五章 实验15
键后,除非不再松开如果松开,就显示满屏幕的。,其他的键照常处理。原创 2024-07-11 14:59:43 · 295 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十五章 检测点15.1
在 int 9 中断例程中,模拟 int 指令调用原 int 9 中断例程的程序段是可以精简的,因为在进入中断例程后,IF 和 TF 都已经置 0,没有必要再设置。在主程序中,如果在设置 int 9 中断例程的段地址和偏移地址之间发生了键盘中断,则 CPU 将转去一个错误的地址执行,将发生错误。在上述设置地址前加上 cli,设置地址后加上 sti 即可避免因中断造成的地址设置错误。来自键盘的中断是一种可屏蔽中断,CPU 根据标志寄存器 IF 的值来决定是否响应该中断,如果为 1 则响应,为 0 则不响应。原创 2024-07-11 14:10:43 · 225 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十四章 实验14
编程,以“”的格式,显示的日期、时间。:CMOS RAM 中存储着,除了保存时间信息的单元外,不要向其它的单元中写入内容,否则将引起一些系统错误。原创 2024-07-11 12:00:22 · 117 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十四章 检测点14.1
编程:用加法和移位指令计算 (ax)=(ax)*10。提示:(ax)*10=(ax)*2+(ax)*8。原创 2024-07-11 10:52:32 · 162 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十三章 检测点13.1、13.2
寄存器 BX 为 16 位寄存器,所表示的最大转移位移为 -32768~32767。应用举例:在屏幕的第 12 行显式 data 段中,以 0 结尾的字符串。原创 2024-07-11 08:26:10 · 150 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十二章 实验十二
【代码】王爽《汇编语言》(第四版)第十二章 实验十二。原创 2024-07-10 07:09:56 · 262 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十二章 检测点12
由预备知识,在中断向量表中,一个表项占两个字,高地址存放段地址,低地址存放偏移地址。则 3 号中断源对应于 8B 01 70 00 部分。(2)存储 N 号中断源对应的中断程序入口的偏移地址的内存单元的地址为。存储 N 号中断源对应的中断程序入口的段地址的内存单元的地址为。则,3 号中断源对应的中断处理程序的入口地址为。原创 2024-07-09 16:39:26 · 183 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十一章 实验十一
debug跟踪程序执行,观察寄存器情况,重点留意查看cmp和后面的跳转语句,对比数据段前后变化,发现所有小写字母已经变成了大写字母。编写一个子程序,将包含任意字符,以0结尾的字符串中的小写字母转变成大写字母。功能:将以0为结尾的字符串中的小写字母转变成大写字母。参数:ds:si指向字符串首地址。名称:lectterc。原创 2024-07-09 15:25:33 · 710 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十一章 检测点11.3 11.4
对于有符号数的计算而言,(-16) + (16) = 0,无溢出,OF=0;对于无符号数的计算而言,(65520) + (16) = 65536,有向更高位的进位,CF=1。and al,11000101B 进行按位与运算,结果为 (AL)=0100 0101=45H;语句 pushf 将标志寄存器的内容入栈,此时标志寄存器的内容为 0000 0000 0100 0101,则后续出栈后 (AX)=0045H。补全下面的程序,统计 F000:0 处 32 个字节中,大小在 (32, 128) 的数据的个数。原创 2024-07-09 15:18:52 · 189 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十一章 检测点11.2
debug跟踪,结果可以得到验证,如下图。mov,push,pop等数据传输指令对于ZF PF SF CF OF没有影响。写出下面每条指令执行后,ZF PF SF CF OF等标志位的值。原创 2024-07-09 11:44:37 · 249 阅读 · 0 评论 -
王爽《汇编语言》(第四版)十一章 检测点11.1
而非1001 0000,导致判断错误。原创 2024-07-09 09:34:00 · 218 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十章 实验十
显示字符串;解决除法溢出的问题;数据显示原创 2024-07-08 17:33:51 · 297 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第十章 检测点
call ax 首先执行 push IP 的功能,即将 5 入栈,然后将寄存器 ax 的内容赋值给 IP 实现段内转移,此时 (IP)=5。CPU 开始执行 CS:6 处的指令,首先将寄存器 SP 的内容赋值给 BP,后面 add 指令相当于 add ax,[bp]。寄存器 ax 的原值为 6,[bp] 默认使用段地址为寄存器 SS 的内容,即 [bp] 取的是栈顶的元素 5。(1)下面的程序执行后,ax 中的值为多少?下面的程序执行后,ax 中的值为多少?下面的程序执行后,ax 中的值为多少?原创 2024-07-08 14:01:20 · 769 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第八章 实验九
1、编辑源程序,为了能够看到三种颜色的切换过程,我中间加了两个延时的过程,但是效果不明显(cpu执行很快),后续这个延时函数再调整吧,程序功能是完备的。可以看到写到显存中的数据,出现在了屏幕中间(屏幕中行的中间,列项我是从列偏移地址为0开始的,也可以尝试其他列偏移地址)原创 2024-07-08 10:47:37 · 171 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第九章 实验八
复制到s处时并不会按照编译器再次自动计算当前标号s到s1的距离(按照源程序两者距离为15),编译为指令(EB0F),而是机械的执行复制到s标号的机器指令EBF6,其中F6,十进制数代表-10,程序执行到s0标号的jmp short s,标号s(机器码为EBF6)时,会跳转到程序最开始处的指令,mov ax,4c00h,int 21h,从而可以正常结束。其中,复制到标号处s处的指令为EBF6,也即源程序中的,jmp short s1的机器码复制过去了。1、首先将程序编译连接,然后debug调试跟踪。原创 2024-07-07 20:44:57 · 186 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第九章 检测点9.3
(1)补全程序,利用jcxz指令,实现在内存2000h段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中,程序如下。原创 2024-07-07 19:58:49 · 166 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第九章 检测点9.2
(1)补全程序,利用jcxz指令,实现在内存2000h段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中,程序如下。原创 2024-07-07 19:45:18 · 136 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第九章 检测点9.1
此时 cs=0006h,ip=00BEh。原创 2024-07-07 19:28:35 · 141 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第八章 实验七
方法一:将每个数据项逐个进行传输,共有4个数据项(分别是年份、收入、雇员数、人均收入)人均收入需要计算后得到,每个数据项又有21个元素,所以需要传输21次。debug跟踪,发现数据已经成功写入到table数据段中。方法二:一次传输一组数据,一共传输21次。原创 2024-07-07 17:23:02 · 254 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第七章 实验六
编辑源程序,内外循环都要用到cx寄存器,通过栈进行保存,外部循环前将cx保存入栈,内部循环结束遇到外部循环loop语句前,将栈中保存的外部cx值pop到cx寄存器中。调试过程,观察数据段中数据正常修改为大写,内外循环逻辑正常,通过p命令退出循环。通过debug加载程序,调试跟踪,开始先查看一下栈中和数据段中的数据,如下图。原创 2024-07-07 13:45:00 · 188 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第六章 检测点6.1
题目要求使用 0:0~0:15 单元的内容改写程序中的数据,即使用 DS:0~ 的数据改写 CS:0~ 的内容。所以,缺失部分程序完成移动数据的功能,而 0:0~0:15 的数据已存放在寄存器 AX 中,所以缺失部分程序为 mov cs:[bx],ax。(2)下面的程序实现依次用内存 0:0~0:15 单元中的内容改写程序中的数据,数据的传送用栈进行。(1)下面的程序实现依次用内存 0:0~0:15 单元中的内容改写程序中的数据。原创 2024-07-06 16:47:11 · 126 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第五章 实验四
3、下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。运行后,源程序中“mov ax,4c00h”之前的指令复制到内存0:200处;1、2、编程,向内存0:200~0:23F依次传入数据0~63(3FH)跟踪程序执行过程,发现数据0:200~0:23f中已写进去数据。,一共五个字节,所以长度为0x1c - 5 = 0x17。在这里我们可以看到,代码的长度是0x1c,但由于从。运行前,观察0020:0内存,内容均为0;2).可以先将此空置为空,原创 2024-07-06 16:16:09 · 143 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第四章 实验三
通过r命令可知程序放在内存段ds=075a:0处,从此地址开始的256字节就是PSP程序段前缀,通过d命令d 075a:0 f观察开始的15个字节,可知PSP的前两个字节为CD20H。1、将下面的程序保存为t1.asm文件,并将其生成可执行文件t1.exe,通过debug命令将可执行文件加载至内存运行。单步跟踪程序执行过程,并观察寄存器情况,最后遇到int 21命令后通过p命令结束程序,返回到debug程序。原创 2024-07-06 10:57:14 · 208 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第三章 实验二
用机器指令和汇编指令编程原创 2024-07-05 21:07:41 · 126 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第三章 检测点3.2
2、补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H—2000FH中。逆序复制的含义如图3.17所示(图中内存里的数据均为假设)。1、补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序。原创 2024-07-05 20:18:12 · 218 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第三章 检测点3.1
各寄存器的初始值:CS = 2000H,IP = 0,DS = 1000H,AX = 0,BX = 0;下面的程序执行前,AX = 0,BX = 0,写出每条汇编指令执行完后相关寄存器中的值。③再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?②写出CPU执行每条指令后,CS、IP和相关寄存器中的数值。①写出CPU执行的指令序列(用汇编指令写出)指令写入指定内存地址,如下。原创 2024-07-05 17:42:53 · 228 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第二章 检测点2.1
mov ah,31H ax=31A3H 把31H传递给ah,也即是ax的高八位寄存器ah,覆盖原来的数据。mov al,23H ax=3123H 把23H传递给al,也即是ax的低八位寄存器al,覆盖原来的数据。add ax,ax ax=6246H 将ax中的数相加,和放在ax中。mov ax,cx ax=6246H 把cx寄存器的数传递给ax。mov ax,bx ax=826CH 将bx中的数据传递给ax。原创 2024-07-05 16:22:59 · 160 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第二章 检测点2.2
(1) 给定段地址为 0001H,仅通过变化偏移地址来寻址,那么,CPU 的寻址范围为_______到_______。分析:仅通过偏移地址的变化来寻址,变化范围就是 0000~FFFFH。把数据代入公式,可算出:最小物理地址 = 0001H × 10H + 0000H = 00010H;最大物理地址 = 0001H × 10H + FFFFH = 1000FH。CPU 中 20 位加法器的计算过程如下。(2) 有一数据存放在内存 20000H 单元中,现给定段地址为 SA,原创 2024-07-05 16:22:23 · 737 阅读 · 0 评论 -
王爽《汇编语言》(第四版)第一章 检测点1.1
而我们知道1B = 8bit,即一字节 = 8位,所以8根数据线一次可以传送8bit = 1B,16根数据线一次可以传送16bit = 2B,32根数据线一次可以传送32bit = 4B。解析:通过第一题我们知道1个存储单元可以存储1个Byte(字节),那么 1KB = 1024 Byte 即可以存储1024个字节,存储单元的编号是从0开始的,所以是0到1023一共1024个字节。(6).8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。原创 2024-07-05 12:11:10 · 319 阅读 · 0 评论 -
王爽《汇编语言》(第四版)编程环境搭建
汇编语言开发环境搭建原创 2024-07-05 11:31:30 · 781 阅读 · 0 评论