摘要:
最近在学习操作系统,操作系统的启动也摸索了一段时间,现在记录下来,方便后续的复习。 1. 总体功能 (1)ROM BIOS 功能描述: x86 PC 刚开机时,CPU 处于实模式(实模式的寻址 CS:IP (CS左移4位 + IP)) 开机时,CS=0xFFFF, IP=0x0000 寻址 0xFF 阅读全文
posted @ 2022-05-26 13:36
夏夜星空晚风
阅读(492)
评论(0)
推荐(0)
摘要:
最近一个月断断续续的在看 王爽的《汇编语言(第3版)》,已经将书看完,相关的实验已经做完并写了博客,看书的过程中做了一个思维导图,以供后续复习使用。 阅读全文
posted @ 2022-05-26 13:33
夏夜星空晚风
阅读(258)
评论(0)
推荐(0)
摘要:
1. 前提知识: (1) 说明 我用的是 DOSBox 0.74-3 启动并运行的,而且我没有软盘,因此我只能操作硬盘 直接向磁盘扇区写入数据是危险的,很可能覆盖掉重要的数据,所以千万不要随便对硬盘中的扇区进行写入。文章中所有程序的功能都是从硬盘中读取数据。 (2) 从 硬盘中读取数据 的测试代码 阅读全文
posted @ 2022-05-26 13:31
夏夜星空晚风
阅读(248)
评论(0)
推荐(0)
摘要:
1. “int 9h 中断例程” 和 “int 16h 中断例程”: (1) 使用 int 9h 中断例程对键盘输入的处理 键盘输入将引发 9 号中断,BIOS 提供了 int 9 中断例程。CPU 在 9 号中断发生后,执行 int 9 中断例程,从 60h 端口读出扫描码,并将其转化为相应的 A 阅读全文
posted @ 2022-05-26 13:30
夏夜星空晚风
阅读(317)
评论(0)
推荐(0)
摘要:
1. 思路: 根据 “第 16 章中的代码示例” 以及 “安装程序” 的套路,仿照着之前的例子,代码写出来不会太难 需要注意以下几点: 在代码段中,“标号”或者是“数据标号”,都代表了该段内的某一个偏移地址。 对于任何一个内存段来说,段地址可以开始于任何16 字节对齐的地方,偏移地址则总是从 0x0 阅读全文
posted @ 2022-05-26 13:24
夏夜星空晚风
阅读(220)
评论(0)
推荐(0)
摘要:
1. 思路: 如果完整的看完了第 15 章节的内容,那么题目还是很简单的 只需要判断 A 键松开后,向端口 60h 发送的扫描码(即 A 键的断码为 9eh) 2. 代码实现: 文件名:exp15.asm assume cs:code stack segment db 128 dup (0) sta 阅读全文
posted @ 2022-05-26 13:22
夏夜星空晚风
阅读(125)
评论(0)
推荐(0)
摘要:
1. 思路: 可以仿照 实验13 的第 3 个例子 的编程思想 将要显示的时间格式预先定义好,从 CMOS RAM 中获取到的 BCD 码,将其转换成对应的 ASCII 码字符后,再替换输出格式中的某些字符 将 CMOS RAM 中,存放当前时间的地址信息先列出来(年、月、日、时、分、秒 的存放单元 阅读全文
posted @ 2022-05-26 13:21
夏夜星空晚风
阅读(161)
评论(0)
推荐(0)
摘要:
1. 思路: 由于代码给出了一部分,咱们可以先通过调用的 int 指令 来判断要实现的功能 比如程序中的 int 10h 中断例程是 BIOS 提供的中断例程,ah 是用来传递内部子程序的编号,(ah)=2 表示调用第 10h 号中断例程的 2 号子程序,功能为设置光标位置,可以提供光标所在的 行号 阅读全文
posted @ 2022-05-26 13:20
夏夜星空晚风
阅读(124)
评论(0)
推荐(0)
摘要:
1. 思路: 可以参考第 13 章中的例子 2. int 7ch 中断例程代码: 文件名:exp132.asm assume cs:code code segment start: mov ax, cs mov ds, ax mov si, offset lp ; 设置 ds:si 指向源地址 mo 阅读全文
posted @ 2022-05-26 13:09
夏夜星空晚风
阅读(109)
评论(0)
推荐(0)
摘要:
1. 思路: 看到题目的第一眼,总感觉题目很熟悉,好像之前写过,仔细想想,原来是 实验10-1 写过一个 显示字符串的子程序 通过第 13 章的学习,我们知道 int 指令 和 iret 指令 的配合使用与 call 指令 和 ret 指令 的配合使用具有相似的思路,因此我们可以将 实验10-1 的 阅读全文
posted @ 2022-05-26 13:07
夏夜星空晚风
阅读(122)
评论(0)
推荐(0)
摘要:
1. 我们要做以下几个事情: 编写可以显示 "divide error!" 的中断处理程序:do0 将 do0 送入内存 0000:0200 处 将 do0 的入口地址 0000:0200 存储在中断向量表 0 号表项中 编写一个除法溢出的测试程序,用于触发除法错误,产生内中断 2. 代码实现: 文 阅读全文
posted @ 2022-05-26 13:05
夏夜星空晚风
阅读(262)
评论(0)
推荐(0)
摘要:
1. 思路: 该程序比较简单,就不写思路了 2. 代码实现: assume cs:codesg datasg segment db "Beginner's All-purpose Symbolic Instruction Code.", 0 datasg ends codesg segment be 阅读全文
posted @ 2022-05-26 13:04
夏夜星空晚风
阅读(78)
评论(0)
推荐(0)
摘要:
1. 思路: 根据第 10 章的第 9 小结,也就是 10.9 模块化程序设计的方法:将程序分为两部分 数值的转换 和 数值的显示 因为 数值的显示 在 实验10-1 已经实现了 show_str,因此我们先将 数值的转换 调试好,再将 show_str 的程序引入进来 因为不断的取余,所以取得余数 阅读全文
posted @ 2022-05-26 13:03
夏夜星空晚风
阅读(223)
评论(0)
推荐(0)
摘要:
1. 思路: 题目给出了一个公式,可以解决除法溢出的问题,因此我们只需要分析公式,然后按照公式的思路去写程序就可以了。 公式:X/N = int(H/N) * 65536 + [rem(H/N) * 65536 + L] / N = int(0FH/0AH) * 65536 + [rem(0FH/0 阅读全文
posted @ 2022-05-26 13:02
夏夜星空晚风
阅读(190)
评论(0)
推荐(0)
摘要:
1. 思路: 因为实验9 的经验,我们知道,在 80x25 彩色模式下,显示器可以显示 25 行,每行 80 个字符,每个字符占据 2 个字节。 行号的取值范围:0 ~ 25,因此,第 n 行的首地址 = 行号 x 80 x 2 列数的取值范围:0 ~ 79,因此,第 n 列地址 = 列号 x 2 阅读全文
posted @ 2022-05-26 13:00
夏夜星空晚风
阅读(143)
评论(0)
推荐(0)
摘要:
1. 解题思路: 通过分析可以得到最后展示效果的起始行和列的大致位置: 第 12 行的起始地址:11 * 80 * 2 = 1760 = 06E0H 第 13 行的起始地址:11 * 80 * 2 + (80 * 2) 第 14 行的起始地址:11 * 80 * 2 + (2 * 80 * 2) 列 阅读全文
posted @ 2022-05-26 12:59
夏夜星空晚风
阅读(80)
评论(0)
推荐(0)
摘要:
1. 分析下面的程序,在运行前思考:这个程序可以正确返回吗? 在程序运行前,我个人的思考结果是不会返回,好像进入了死循环(说明我在看第九章的时候不仔细(─.─||)) 2. 运行后再思考:为什么是这种结果? 先说结论:运行后,程序可以正确返回 3. 代码讲解: mov di, offset s mo 阅读全文
posted @ 2022-05-26 12:57
夏夜星空晚风
阅读(240)
评论(0)
推荐(0)
摘要:
1. 思路: data 段: 年份的数据:4 * 21 = 84 = 54H 公司年度总收入的数据:4 * 21 = 84 = 54H 雇员的数据:2 * 21 = 42 = 2AH 可以得出下面的关系: data 段中,“年份”的起始地址为 0 (假设 bx = 0) “公司年度总收入”的起始地址 阅读全文
posted @ 2022-05-26 12:56
夏夜星空晚风
阅读(276)
评论(0)
推荐(0)
摘要:
(1)将课程中所有讲解过的程序上机调试,用 Debug 跟踪其执行过程,并在过程中进一步理解所讲内容。 (略) (2)编程,完成问题 7.9 中的程序。 完成的程序如下: assume cs:codesg, ds:datasg, ss:stacksg stacksg segment dw 0, 0, 阅读全文
posted @ 2022-05-26 12:55
夏夜星空晚风
阅读(115)
评论(0)
推荐(0)
摘要:
(1) 编程,向内存 0:2000:23F 一次传送数据 063(3FH)。 assume cs:code code segment mov ax, 0020h mov ds, ax mov bx, 0 mov cx, 64 ; (cx)=64,循环 64 次 s: mov ds:[bx], bl 阅读全文
posted @ 2022-05-26 12:54
夏夜星空晚风
阅读(81)
评论(0)
推荐(0)
摘要:
1. 将上图所示的程序保存为 t1.asm 文件,将其生成可执行文件 t1.exe。 (1) 汇编程序从写出到执行的过程: (2) 编辑 可以使用任意的文本编辑器来编辑源程序,只要最终将其存储为纯文本文件即可。 文本编辑器: (1) 前面的文章配置 Debug 环境时,提到过的执行文件 Edit ( 阅读全文
posted @ 2022-05-26 12:52
夏夜星空晚风
阅读(350)
评论(0)
推荐(0)
摘要:
(一)预备知识:Debug 的使用 1. 什么是 Debug? Debug 是 DOS、Windows 都提供的实模式(8086 方式)程序的调试工具。使用它,可以查看 CPU 各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。 2. 我们用到的 Debug 功能 用 Debug 的 R 命 阅读全文
posted @ 2022-05-26 12:50
夏夜星空晚风
阅读(364)
评论(1)
推荐(0)
摘要:
Debug 是 DOS、Windows 都提供的实模式(8086 方式)程序的调试工具。使用它,可以查看 CPU 各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。 32 位的 Windows 操作系统可以直接通过 cmd命令窗口 输入 debug 就可以调试; 64 位的 Windows 阅读全文
posted @ 2022-05-26 12:48
夏夜星空晚风
阅读(779)
评论(0)
推荐(0)
摘要:
当你被面试官要求用 C 写一个“Hello World”时,有本事像下图显示的那样写一个出来吗? 输入格式: 输入首先给出 26 个英文大写字母 A-Z,每个字母用一个 7×5 的、由 C 和 . 组成的矩阵构成。最后在一行中给出一个句子,以回车结束。句子是由若干个单词(每个包含不超过 10 个连续 阅读全文
posted @ 2022-05-26 09:29
夏夜星空晚风
阅读(178)
评论(0)
推荐(0)
摘要:
给定一个长度不超过 10^4 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 StringString.... (注意区分大小写)这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 String 的顺序打印,直到所有字符都被输出。例如 阅读全文
posted @ 2022-05-26 09:28
夏夜星空晚风
阅读(188)
评论(0)
推荐(0)
摘要:
翁恺老师曾经设计过一款 Java 挑战游戏,叫“老鼠爱大米”(或许因为他的外号叫“胖胖鼠”)。每个玩家用 Java 代码控制一只鼠,目标是抢吃尽可能多的大米让自己变成胖胖鼠,最胖的那只就是冠军。 因为游戏时间不能太长,我们把玩家分成 N 组,每组 M 只老鼠同场竞技,然后从 N 个分组冠军中直接选出 阅读全文
posted @ 2022-05-26 09:26
夏夜星空晚风
阅读(134)
评论(0)
推荐(0)
摘要:
把 2019 各个数位上的数字 2、0、1、9 作为一个数列的前 4 项,用它们去构造一个无穷数列,其中第 n(>4)项是它前 4 项之和的个位数字。例如第 5 项为 2, 因为 2+0+1+9=12,个位数是 2。 本题就请你编写程序,列出这个序列的前 n 项。 输入格式: 输入给出正整数 n(≤ 阅读全文
posted @ 2022-05-26 09:25
夏夜星空晚风
阅读(63)
评论(0)
推荐(0)
摘要:
“教育超市”是拼题 A 系统的一个衍生产品,发布了各种试卷和练习供用户选购。在试卷列表中,系统不仅列出了每份试卷的单价,还显示了当前的购买人次。本题就请你根据这些信息找出教育超市所有试卷中的销量(即购买人次)冠军和销售额冠军。 输入格式: 输入首先在第一行中给出一个正整数 N(≤104),随后 N 阅读全文
posted @ 2022-05-26 09:24
夏夜星空晚风
阅读(67)
评论(0)
推荐(0)
摘要:
题目: 代码实现: 解法一 #include <stdio.h> #include <string.h> int main() { char arr[11]; int d; if (scanf("%s %d", arr, &d) == 2) { // 数组的长度 int len = strlen(a 阅读全文
posted @ 2022-05-26 09:23
夏夜星空晚风
阅读(97)
评论(0)
推荐(0)
摘要:
给定两个字符串 A 和 B,本题要求你输出 A+B,即两个字符串的并集。要求先输出 A,再输出 B,但重复的字符必须被剔除。 输入格式: 输入在两行中分别给出 A 和 B,均为长度不超过 10^6 的、由可见 ASCII 字符 (即码值为32~126)和空格组成的、由回车标识结束的非空字符串。 输出 阅读全文
posted @ 2022-05-26 09:21
夏夜星空晚风
阅读(104)
评论(0)
推荐(0)
摘要:
做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三。”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积。 输入格式: 输入在第一行给出两个不超过 1000 的正整数 A 和 B,其间以空格分隔。 输出格式: 在一行中倒着输出 A 和 B 的乘积。 输 阅读全文
posted @ 2022-05-26 09:02
夏夜星空晚风
阅读(74)
评论(0)
推荐(0)
摘要:
编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。 现给定所有队员的比赛成绩,请你编写程序找出冠军队。 输入格式: 输入第一行给出一个正整数 N(≤10^4),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号- 阅读全文
posted @ 2022-05-26 09:00
夏夜星空晚风
阅读(84)
评论(0)
推荐(0)
摘要:
划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。 下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。 阅读全文
posted @ 2022-05-26 08:59
夏夜星空晚风
阅读(39)
评论(0)
推荐(0)
摘要:
请编写程序,找出一段给定文字中出现最频繁的那个英文字母。 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。 输出格式: 在一行中输出出现频率最高的那个英文字母及其出现次数,其间以 阅读全文
posted @ 2022-05-26 08:49
夏夜星空晚风
阅读(62)
评论(0)
推荐(0)
摘要:
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧! 输入格式: 输入在一行中给出正方形边长 N(3≤N≤20)和组成正方 阅读全文
posted @ 2022-05-26 08:47
夏夜星空晚风
阅读(59)
评论(0)
推荐(0)
摘要:
输入两个非负 10 进制整数 A 和 B (≤2^30 − 1),输出 A+B 的 D (1<D≤10)进制数。 输入格式: 输入在一行中依次给出 3 个整数 A、B 和 D。 输出格式: 输出 A+B 的 D 进制数。 输入样例: 123 456 8 输出样例: 1103 代码实现: #inclu 阅读全文
posted @ 2022-05-26 08:46
夏夜星空晚风
阅读(57)
评论(0)
推荐(0)
摘要:
题目: 代码实现: #include <stdio.h> int main() { // 获取输入的字符串 char str[1001]; // 用条件判断语句对 scanf 的内容进行判断保护 // 避免输入非法字符,导致返回值为 0 或者出错 if (scanf("%s", str)) { // 阅读全文
posted @ 2022-05-26 08:45
夏夜星空晚风
阅读(48)
评论(0)
推荐(0)
摘要:
题目: 代码实现: #include <stdio.h> int main() { char a[11], b[11], da, db; // 获取输入的值 if (scanf("%s %c %s %c", a, &da, b, &db) == 4) { int na = 0, nb = 0; // 阅读全文
posted @ 2022-05-26 08:44
夏夜星空晚风
阅读(65)
评论(0)
推荐(0)
摘要:
给定区间 [−231, 231] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。 输入格式: 输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。 输出格式: 对每组测试用例,在一行中输出 C 阅读全文
posted @ 2022-05-26 08:43
夏夜星空晚风
阅读(49)
评论(0)
推荐(0)
摘要:
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。 输出格式: 每 阅读全文
posted @ 2022-05-26 08:41
夏夜星空晚风
阅读(72)
评论(0)
推荐(0)
摘要:
让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为 BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。 输入格式: 每个测试输入包含 1 个测试用 阅读全文
posted @ 2022-05-26 08:40
夏夜星空晚风
阅读(41)
评论(0)
推荐(0)
摘要:
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^100。 输出格式: 在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。 输入样 阅读全文
posted @ 2022-05-26 08:38
夏夜星空晚风
阅读(95)
评论(0)
推荐(0)
摘要:
卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题 阅读全文
posted @ 2022-05-26 08:35
夏夜星空晚风
阅读(83)
评论(0)
推荐(0)

浙公网安备 33010602011771号