zoukankan      html  css  js  c++  java
  • 王爽汇编第二章答案

    检测点2.1

    mov ax,62627       AX  =  F4A3H
    
    mov ah,31H         AX  =  3143H
    
    mov al,23H         AX  =  3123H
    
    add ax,ax         AX  =  6246H
    
    mov bx,826CH       BX  =  826CH
    
    mov cx,ax         CX  =  6246H
    
    mov ax,bx         AX  =  826CH
    
    add ax,bx         AX  =  04D8H
    
    mov al,bh         AX  =  0482H 
    
    mov ah,bl         AX  =  6C82H
    
    add ah,ah          AX  =  D882H
    
    add al,6         AX  =   D888H  
    
    add al,al         AX  =  D810H

    mov ax,cx       AX  = 6246H

    解析:
    十六进制相加,如果相加之和大于16,那么以16进1。
    八/十六位数据与八/十六位位寄存器进行相加,八/十六位位寄存器与八/十六位寄存器相加
    如果八位寄存器相加后越出那一部分不算!比如八位寄存器算出来是82CH 那么只取2CH.

    (2) 只能使用目前学过的汇编指令,最多使用4条指令,编程计算2的4次方
      到目前为止,我们只学习了add和mov这二个指令
      mov ax,2    ax = 2
      add ax,ax   ax = 4
      add ax,ax   ax = 8
      add ax,ax   ax = 16

    (1)给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为   到    。

     

    (2)有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为1001H,最大为2000H。

    当段地址给定为1001H以下和2000H以上,CPU无论怎么变化偏移地址都无法寻到20000H单元。

    解题过程:

    物理地址=SA*16+EA

    20000h=SA*16+EA

    SA=(20000h-EA)/16=2000h-EA/16

    EA取最大值时,SA=2000h-ffffh/16=1001h,SA为最小值

    EA取最小值时,SA=2000h-0h/16=2000h,SA为最大值

    检测2.3

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

    mov ax,bx  => 读取到指令缓冲器中 => 修改IP =>执行该指令

    sub  ax,ax     =>   读取到指令缓冲器中 => 修改IP =>执行该指令

    jmp  ax    => 读取到指令缓冲器中 => 修改IP =>执行该指令 =>之后完之后由于jmp指令再次修改ip

    所以一共是 4 次 修改ip,AX = AX - AX = 0;

        

    指令的执行过程

    1:CPU从当前的CS和IP指向内存单元,读取指令,然后将读取的指令 进入到指令缓冲器中。

    2:IP = IP + 所读指令的字节数(长度),从而指向下一条指令

    3:执行 指令缓冲器中的内容,回到第一步。

    2、将下面3条指令写入 从2000:0开始的内存单元中,利用3条指令计算2的8次方

    首先 2^8 = 256(转化为16进制等于0100h)

     2000: 0000   mov ax,1  

     2000:0005    add ax,ax

     2000:0005    jmp 2000:005

     3、查看内存中的内容

    PC机主板上的ROM中写有一个生产日期,在内容FFF00H ~ FFFFFH的某几个单元中,

    请找出这个生产日期并试图改变它

     生产日期也就是在FFF0:00F0

     因为是ROM内存,这是一个可读不可写的内存,所以我们尝试去修改是没什么作用的~ 

    4、向内存 从B810:0000 开始的内存单元中填写数据

    -e B810:0000 01 01 02 02 03 03 04 04

     为什么会显示那些小东西,是由于B810:0000这块内存是一块显存,至于为什么会显示这些东西,暂时还不清楚~ 

     

  • 相关阅读:
    TyporaRecord
    c# 串口 应答式顺序下发命令 循环 间隔发送指令
    WPF 如何在单独的配置文件中使用Log4net
    UWP VisualStateManager
    USB通信
    UWP RelativePanel
    JSON 序列化与反序列化
    Unity 依赖注入的三种常用模板
    IOC Unity容器的基本使用
    使用EF完成基于SQLite的CodeFirst
  • 原文地址:https://www.cnblogs.com/Yzengxin/p/14372292.html
Copyright © 2011-2022 走看看