阅《汇编语言》记录的小结笔记及练习题(一)

栏目: 编程语言 · 发布时间: 6年前

内容简介:[TOC]最近在看着《汇编语言》这本书,记录了书内前篇的小结以及问答题的练习PS:好久没有更新博客了,出来冒个泡。

[TOC]

前言

最近在看着《汇编语言》这本书,记录了书内前篇的小结以及问答题的练习

PS:好久没有更新博客了,出来冒个泡。

(这是我年初看的,然后做的笔记,距离年初我看这本书已经过去了8个月了,嗯,然后,现在已经忘记的差不多了:joy::joy::joy:)

小结

  • 汇编指令是机器指令的助记符,同机器指令一一对应;

  • 每一种CPU都有自己的汇编指令集;

  • CPU可以直接使用的信息在存储器中存放;

  • 在存储器中指令和数据没有任何区别,都是二进制信息;

  • 存储单元从零开始顺序编号;

  • 一个存储单元可以存8个bit,也就是8位二进制数;

  • 8bit = 1Byte、1024B = 1KB、1024KB = 1MB、1024MB = 1GB、1GB = 2014TB

  • 8086有14个寄存器,每个寄存器都有一个名称,这些寄存器为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。

  • 8086CPU的寄存器都是16位的,可以存放两个字节。AX、BX、CX、DX,这4个寄存器通常用来存放一般的数据,被称为通用寄存器。

阅《汇编语言》记录的小结笔记及练习题(一)

  • AX、BX、CX、DX可以分为两个独立使用的8位寄存器来用

    • AX 可分为:AH、AL;
    • BX 可分为:BH、BL;
    • CX 可分为:CH、CL;
    • DX 可分为:DH、DL; 阅《汇编语言》记录的小结笔记及练习题(一)
  • AX寄存器的低8位由0~7组成的AL寄存器,高8位由8-15组成的AH寄存器。AL和AH是可以独立使用的8位寄存器。

    阅《汇编语言》记录的小结笔记及练习题(一)

书中作者为了区分进制在数字后加H作为该值为十六进制,因此H代表着十六进制数

问题2.1

指令执行后 AX 中的数据为多少? 首先在上一条指令执行后的 AXBX 数据都为 8226H 那么 add ax,bx 就是为: ax = 0x8226 + 0x8226 = 0x1044c ; 由于 AX 寄存器为16位寄存器,所以最高位 1 是没办法存储在 AX 中,最后结果为: 044c ,因为 04为8位、4c为8位 一共16位 阅《汇编语言》记录的小结笔记及练习题(一)

问题2.2

指令执行后 AX 中的数据为多少? 首先在上一条指令执行完后 AX 寄存器中的值为: 00C5 ; 当 add al,93H 指令执行执行后运算过程为: 0xc5+0x93=0x158 ; 由于 al 是8位寄存器,只能存储两位16进制数,所以高位的 1 则无法保存至 al 寄存器中,最后 AX 结果为: 0058

在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的,例如:

mov ax,bx
mov bx,cx
mov ax,18H
mov al,18H
add ax,bx
add ax,20000

等都是正确的指令,而:

mov ax,bl    (在8位寄存器和16位寄存器之间进行数据传送)
mov bh,ax (在16位寄存器和8位寄存器之间进行数据传送)
mov al,20000  (8位寄存器最大可存放255数据)
add al,100H  (将一个高于8位的数据添加到一个8位寄存器中)

等都是错误的,因为两个操作对象的位数是不一致的;

问题2.3

问题:请写出左侧指令运行后 右侧的结果为多少?

mov ax,62627            AX = f4a3H
mov ah,31H               AX = 31a3H
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

###问题2.4 阅《汇编语言》记录的小结笔记及练习题(一) 分析:

已得知: CS=2000HIP=0000H 首先将: 0x2000 * 16 + 0x0000 = 0x20000 放进地址加法器中计算,然后拿出了 B8 22 66 长度为: 3Byte 因此 IP 加 3 变成了 0003 , 执行 mov ax,6622H 命令后: AX=6622H 然后 0x2000 * 16 + 0x0003 = 0x20003 拿出了 EA 03 00 00 10 长度为: 5Byte 因此 IP 加5 变成了 0008 指令执行完后 CS = 1000H ip = 0003 然后 0x1000 * 16 + 0x0003 = 0x10003 拿出了 B8 00 00 长度为 3Byte 因此 IP 加 3 变成了 0006 然后执行指令后 AX = 0000 接着 0x1000 * 16 + 0x0006 = 0x10006 拿出了 8B D8 长度为: 2Byte 因此 IP 加2 变成了 0008 然后执行指令后 BX = 0000 0x1000 * 16 + 0x0008 = 0x10008 拿出 FF E3 长度为: 2Byte 因此 IP 加2 变成了 000A 然后执行指令后 IP变成了: 0000 (因为 jmp 具有修改 IP 值 的功能) 此时: CS = 1000HIP = 0000 经过在地址加法器计算,又到了 10000H 执行 上图执行流程为:

mov ax,6622H
jmp 1000:3
mov ax,0000
mov bx,ax
jmp bx
mov ax,0123H
之后如此循环

关于位数之间的关系(自己所理解的)

  • 一位16进制相当于4位二进制,两位16进制相当于8位二进制也就是为一个独立使用的寄存器,如: alah ,等,一个8位寄存器则可存放两位十六进制数

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Software Engineering for Internet Applications

Software Engineering for Internet Applications

Eve Andersson、Philip Greenspun、Andrew Grumet / The MIT Press / 2006-03-06 / USD 35.00

After completing this self-contained course on server-based Internet applications software, students who start with only the knowledge of how to write and debug a computer program will have learned ho......一起来看看 《Software Engineering for Internet Applications》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具