roo66t 发表于 2021-12-9 16:56:42

检测点2-学习笔记

本帖最后由 roo66t 于 2021-12-9 17:03 编辑

检测点2.1
(1)写出每条汇编指令执行后相关寄存器中的值

        mov ax,62627                AX=f4a3H                //将62627从十进制转化为16进制
        mov ah,31H                AX=31a3H                //更换AX高位
        mov al,23H                AX=3123H                //更换AX低位
        add        ax,ax                        AX=6246H                //将值3123相加
        mov bx,826CH                BX=826CH                //复制826CH到BX中
        mov        cx,ax                        CX=6246H                //将AX的值复制到CX中
        mov         ax,bx                AX=826CH                //复制BX值覆盖AX值
        add        ax,bx                AX=04D8H        //将AX值与BX值相加(C=12,相加得出24,但这是16进制,24-16=8)
        mov        al,bh                        AX=0482H                //将BX高位覆盖AX低位
        mov        ah,bl                        AX=6C82H                //将BX低位覆盖AX高位
        add        ah,ah                AX=D882H        //AX高位相加
        add        al,6                        AX=D888H        //AX低位相加(6在十进制和十六进制的值都是6)
        add        al,al                        AX=D810H        //AX低位相加,多出来的值影响不到高位
        mov        ax,cx                        AX=6246H                //将CX值覆盖AX值

(2)只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方

        mov        ax,2
        add        ax,ax
        add        ax,ax
        add        ax,ax                        //移动2到AX寄存器中,将AX值进行3次相加得出16

检测点2.2

(1)给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围(0010H)到(1000FH)。
       
        解析:公式:物理地址=段地址*16+偏移地址        //偏移地址范围是(0~FFFFH)
                假设物理地址为SA,偏移地址为EA
                SA=0001H*16+EA(0~FFFFH)        //16进制*16=值左移一位
                SA=0010H+EA(0~FFFFH)
                SA=0010H~1000FH               

        注:我个人理解*16=后面多加个0,如本题:00010+FFFF,得到结果就为5位的16进制,不然以4位16进制相加,就陷入了进制位省略的误区,欢迎大佬进行讲解。

(2)有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件是:最小为(1001H),最大为(2000H)。
       
        解析:按照如上公式,20000H=SA*16+EA(0~FFFFH)
                20000H/16=SA+EA(0~FFFFH)/16        //将FFFFH换算为10进制 65535/16=4095
                2000H=SA+EA(0~0FFFH)                //将4095换算为16进制0FFFH
                SA=2000H-EA(0~0FFFH)
                SA=2000H~1001H

        注:如果该题按照位移算法,向右移一位,值位1000.1(2000.0H-FFF.FH),但小数点的段地址没见过,舍弃小数位将无法找寻到20000H单元,也求大佬进行讲解

检测点2.3

        下面的3条指令执行后,CPU几次修改IP?都是在什么时候?最后IP中的值是多少?

                mov        ax,bx                //本指令将bx值复制到ax中,此时ip发生第一次变化
                sub        ax,ax                        //本指令将ax值相减,得到ax=0,此时ip发生第二次变化
                jmp        ax                        //本指令将ax值覆盖偏移地址的值(可以看作mov ip,ax),此时ip发生第三次变化
                                                //第四次变化为上一条指令将IP值变为0

qaz4867056 发表于 2021-12-10 21:03:55

看不懂 大佬
页: [1]
查看完整版本: 检测点2-学习笔记