x86汇编从实模式到保护模式 记录思考和习题答案

来源:互联网 发布:禅道数据库配置 编辑:程序博客网 时间:2024/06/05 03:21

开坑汇编, 教材是李忠老师的x86汇编:从实模式到保护模式, 已经读完了第6章, 这本书我很喜欢, 让人有一种看起来不想停下的感觉, 之前能给我这种感觉的教材无一例外都是那些国外著名教材, 比如C++ Primer Plus, 机械工业出版社的那本计算机组成原理,也推荐大家学这些的时候可以看看.

之前看书不管不顾, 看过之后好多细节都已经忘了, 被人问起来一脸懵逼, 要现去翻半天书才能讲讲明白, 而且看书过程中自己有许多有疑惑的地方要边看边百度, 有时百度并不能找到那么细枝末节的地方, 就那么过去了, 所以这本书开始我就开个博客记录自己看书过程中的疑惑和书中作者给出的思考和习题解答, 督促自己看书认真同时也可能可以方便到别人, 挺好的.

先贴个刚刚写完的第6章习题1,2

        ;第6章习题1,2        ;文件名:c06_1.asm        ;文件说明:硬盘主引导扇区代码        ;创建日期:2017-10-04 16:57        jmp near startdata1:  db 0x05,0xff,0x80,0xf0,0x97,0x30data2:  dw 0x90,0xfff0,0xa0,0x1235,0x2f,0xc0,0xc5bcstart:          mov ax,0x07c0               ;设置数据段基地址         mov ds,ax        mov ax,0xb800               ;设置附加段基地址         mov es,ax        mov dx,0                    ;dh和dl分别计正数和负数个数        mov cx,6                    ;循环6次        mov bx,data1        mov si,0lop1:   cmp byte [bx+si],0x00        jg plus        inc dl                      ;不大于0的计数,如果大于0,jg指令会跳过这句    plus:   inc si                              loop lop1        mov dh,0x06        sub dh,dl                           add dh,0x30         add dl,0x30        mov [es:0x00],dh        mov [es:0x06],dl        mov dx,0                    ;这段和上面基本是一样的        mov cx,7        mov bx,data2        mov si,0lop2:   cmp byte [bx+si],0x00        jg plus2        inc dl  plus2:  inc si                              loop lop2        mov dh,0x07        sub dh,dl        add dh,0x30        add dl,0x30        mov [es:0x0C],dh        mov [es:0x10],dl        jmp near $times   510-($-$$) db 0        db 0x55,0xaa

懒得输出别的东西,只有答案数字
注意题中数字没有0, 所以这里用的jg指令比较数字是否大于0, 如果题中数字包含0的话, 还需要加上判断是否等于0.

本页中还有一个思考题(p97), xor dx,dx之后标志位变化为SF=0, PF=1, ZF=1. 原因是指令执行后dx=0x00000000 00000000, ZF零标志当然为1, 低八位中”1”有0个, 偶数, PF=1, 最高位为比特”0”, SF=0.

习题3:

         mov cx,0delay:   loop delay

将执行ffff次或者理解为死循环, 因为当遇到loop语句时, 是先cx减一, 在判断ZF标志位是否为1的, 所以cx初值为0时, 第一次遇到loop时, cx减一变成-1, 之后不停减一, 直到减一圈回到0才会停下.

阅读全文
0 0
原创粉丝点击