汇编语言(第3版)
七哥地盘
这个作者很懒,什么都没留下…
展开
-
[Chapter 15] - [实验15]
思考需要1个安装程序安装新int9老int9入口备份新int9入口注册需要重写1个新int9,并在其中模拟调用老int9以处理硬件信息按键A的处理如果松开A,就显示满屏幕A:端口60h接收到的是断码9Eh (计算方法,通用1Eh+80h=8Eh)还要考虑到是大写的A,因为只对al接收到的信息与8Eh比较,将对小a的输入也会做出同A一样的响应,而题目要求只对大写A响应。C...原创 2019-12-12 20:27:07 · 89 阅读 · 0 评论 -
[Chapter 14] - [实验14]
;ex14_1.exe;按指定格式(年/月/日 时:分:秒)在屏幕中显示CMOS RAM中的时间内容;思路:按P263的(3)中的思路,将地址组在一起,;再将要提取的单元数组在一起(本例中每个数据只有1字节,所以本步省略),分别喂食给 处理模块assume cs:codecode segment;地址编组s1: db 9,8,7,4,2,0;预留字符串内存空间 - 每个字节拆分...原创 2019-12-06 20:23:30 · 109 阅读 · 0 评论 -
[Chapter 14] - [检测点14.2]
;用加法称移位指令计算(ax)=(ax)*10;可拆分为 (ax)*2+(ax)*8assume cs:codecode segmentstart: push bx ;(ax)*2 mov ax,5;随便给的数,用于验证结果 mov bx,ax;因为ax*2后,ax中的值将变化,后面还要用到ax中的原始值 shl bx,1 ;(ax)*8 mov cl,...原创 2019-12-05 22:05:40 · 100 阅读 · 0 评论 -
[Chapter 13] - [实验13]
(1)代码第1种:用之前的方法,逐个字节复制ASCII,逐个填充属性单元。经验证正确;实验13;功能:显示一个用0结尾的字符串;参数:ds:si指向源字符串,位置用dh显示行、dl显示列,cl为显示属性;返回值:无assume cs:codedata segment db 'welcome to masm!',0data endscode segmentstart:...原创 2019-12-04 21:49:40 · 115 阅读 · 0 评论 -
[Chapter 13] - [检测点13.1]
;检测点11.3;int 7ch的安装程序assume cs:codedata segment db 'conversation',0data endscode segmentstart: mov ax,cs mov ds,ax mov si,offset jnear mov ax,0 mov es,ax mov di,2...原创 2019-12-01 11:44:00 · 317 阅读 · 0 评论 -
[Chapter 13] - [检测点13.2]
(1)错误。这里有两个原因:CPU通电,将CS:IP指向0FFFFH:0是对CPU的硬件设计,此时还没有轮到操作系统介入,更不会有程序员的程序执行,从时间点上,我们无权限干涉。更不可能去更改硬件中的设计硬件检测和初始化程序是非常有必要的,不能跳过否则硬件有问题,操作系统即使启动了也不能正常工作初始化程序的任务中包含着将BIOS的中断例程注册在中断向量表,且包含着调用int 19h 将计...原创 2019-12-01 11:41:35 · 261 阅读 · 0 评论 -
[Chapter 12] - [实验12]
需要注意的几个错误200H和202H,要在编辑器中末尾加H,以注明是HEX,否则会将do0程序安装到错误位置设置中断向量表时,要注明mov word ptr,否则会报错operand must have size,因为未注明要向多大的数据(几个内存单元)进行写入;实验12:编写0号中断的处理程序;火箭(送卫星进预定位置) - do0的安装程序assume cs:codecode ...原创 2019-11-23 17:07:09 · 148 阅读 · 0 评论 -
[Chapter 12] - [检测点12.1]
(1)关键点:中断向量表是从第0个单元开始每个表项由2个word构成,即4个byte高地址word存储段地址,低地址word存储偏移地址回到问题本身,求3号中断源入口(即地址):将内存4个字节一组,第1组记为0,第2组记为1,以此类推,第4组记为3,即3号中断源的表项,debug中显示 8B 01 70 00。因为debug从左至右是低地址到高地址,所以实际书写习惯是 0...原创 2019-11-15 22:04:41 · 195 阅读 · 1 评论 -
[Chapter 11] - [实验11]
本实验考察知识点有条件转移的意识,以及用法与0比较,是否相等区间的判断,如[61h,7Ah]小写转大写(AND用法,是老知识点)思路:读取源字符串处理筛选出哪些字符是小写小写转大写循环处理(在不知字符串元素个数的情况下,有2种方式:1.计算出个数;2.条件判断)写入目标位置代码1:;程序名:;功能:;参数:;返回结果:;一、m...原创 2019-11-15 17:40:08 · 109 阅读 · 0 评论 -
[Chapter 11] - [检测点11.4]
考察知识点:AND指令的理解标志寄存器所在16bit的构成无符号运算、有符号运算,分别影响哪些标志寄存器溢出,是否有进位,都是相对于要容纳结果的寄存器而言的,同1个数,用AL,和AX去容纳,前者溢出,后者可能不溢出,取决于寄存器的容纳范围分析:不论是有符号运算,还是无符号运算,得到的结果都是一样的(只是它们代表实际意义不同,无符号就是值本身,而有符号还要转为原码)不用担心是不是...原创 2019-11-12 10:19:56 · 189 阅读 · 2 评论 -
[Chapter 11] - [检测点11.2]
以下为详细梳理:CFOFSFZFPF分析sub al,al00011判断CF:无符号运算时,无进位,CF=0判断OF:有符号运算时,无溢出,OF=0判断SF:结果为0,非负,SF=0判断ZF:结果为0,SF=1判断PF:结果0的BIN中有0个1bit,0为偶数,PF=1mov al,10H00011mov,push,pop不对标记位产生...原创 2019-11-03 15:05:25 · 230 阅读 · 0 评论 -
[Chapter 11] - [检测点11.1]
需要注意,这是一个“完整的”程序,所有指令不是独立的,是互相影响的mov al,al;al=0 —— 结果为0,0有偶数个1bits,0是非负 —— ZF=1,PF=1,SF=0。mov al,1;al=1 —— ZF=1,PF=1,SF=0——传送指令mov,push pop不影响这3个flag的值,原值为多少仍是多少push ax;同上pop bx;bl=1。同上add al,bl;...原创 2019-10-31 20:26:05 · 131 阅读 · 0 评论 -
[Chapter 10] - [课程设计1]
思路创建1个临时区域,用于存放dtoc转换后的字符串区域命名为temp考虑到容量要足够容纳 “十进制待转换数字” 的每一位转换后的ASCII,对比原始数据后,用16个内存单元足可容纳此区域的每个字符串均用1个值为00的单元结尾,此功能由dtoc实现主程序循环21次,每次对每个字段的其中1个数据进行处理,包含的动作内容为:将data中 年份 字段中1个数据(dword型),传递...原创 2019-10-31 11:53:05 · 137 阅读 · 0 评论 -
[Chapter 10] - [检测点10.5]
检测点10.5这里要注意,程序将stack段同时与ss与ds进行了关联,也就是此段既被当作栈使用,同时被当作数据段使用call word ptr ds:[0EH] 的理解IP指向此call指令时,call指令被读取进CPU的指令缓存器IP立第即指向了call指令的后的下一条指令,即本程序中的第1条 inc ax然后,指令缓冲器中的call指令开始正式被执行第1步...原创 2019-10-07 15:24:02 · 186 阅读 · 0 评论 -
[Chapter 9] - [实验9]
思路先在data段中定义3行数据,每行32个单元,每行的前16个单元存放ASCII,每行后16个单元存放属性将data段中的内容,传递到目标缓冲区,传递的过程中,每次从data单行中前16个单元中摘出1个,后16个单元中摘出1个,构成1个组合(每个组合由1个ASCII单元和1个属性单元构成)代码;实验9assume cs:code,ds:data,ss:stackdata segm...原创 2019-10-06 22:47:09 · 85 阅读 · 0 评论 -
[Chapter 8] - [实验7]
思路:本实验用2种思路各完成一遍。自己最先想到的思路,将源数据区视视为一个整体,将目标数据区也视为一个整体,loop 21次,每次完成4+4+2个字节的传输,均适用idata[si]的寻址方式书中的思路,将源数据区视为3个独立的数组,将目标数据区视为21个结构,每个结构由一整行(16个单元)构成,适用于[bx].idata[si]的寻址方式以下为代码 (CSDN不能高亮汇编代码,也是醉...原创 2019-09-18 13:51:39 · 156 阅读 · 0 评论