• 汇编语言前五章总结


    以下所有的总结基于我只学了前五章的前提下,可能会有错误

    第一章:基础知识

    • 在内存中把指令和数据区别开来:cs:ip指向的内存中的”数据“就是cpu认为的指令。

    • 一个储存单元:2个16进制数字,8位,1个字节

    • cpu将系统中各类内存器看作一个逻辑内存器

    第二章:寄存器

    • 8086cpu的所有寄存器都是16位的

    • 8086cpu中 1个字 = 2个字节

    • xx位cpu指的是:运算器一次处理的数据位数,寄存器位数,计算器与运算器之间通路的位数

    • 8086有20位地址总线,用两个寄存器(段地址,偏移地址)来表示内存地址,具体计算方法是(段地址*16+偏移地址)就是内存地址

    • 段地址的起始地址只能是16的倍数(段地址*16,偏移量为0)

    • cs:ip指向下一个要执行指令的地址

    • 修改cs:ip : jmp cs:ip

    • debug用法

      • r : 查看所有寄存器状态
      • r ax(cs,ip...):修改ax的值
      • d ds:bx ax:查看ds:bx到ds:ax的值
      • e ds:ax 修改ds:ax的值
      • u cs:ip :查看汇编指令(如果可以反汇编成汇编指令的话)
      • a ds:ax :写汇编指令

    第三章:寄存器(内存访问)

    • 一个字的地址是这个字的低8位所在的内存地址

    • 访问内存数据 ds:[bx]

      • debug中可以[idata]访问,写汇编文本文源文件的时候不可以
      • 源文件:ds:[idata] 或者 [寄存器]
    • add,sub 不可以操作段寄存器

    • ss:sp指向栈顶

    第四章:第一个程序

    assume cs: code
    
    code segment
    	...
    	
    	mov ax,4c00h
    	int 21h
    code ends
    end
    
    • loop s:(cx) = (cx)-1, 如果cx不为0,ip跳到s的位置,否则往下执行

    • 0:200-0:2ff是安全的空间

    第五章:[BX]和loop

    • loop 语法

      s:  code...
      	code...
      	loop s
      ;每进行一次loop,cx减一,直到为0,跳出循环
      
    • 在源代码中,[idata]会被解释为idata, 而不是 ds:[idata], 所以源代码中需要显式的写 ds:[idata], 或者[bx]

  • 相关阅读:
    基本的Web控件二
    基本的Web控件一
    centos更改默认语言
    nginx优化配置
    使用nginx的proxy_cache做网站缓存
    centos7配置笔记
    redis批量删除
    Linq常用操作
    MVC ViewData和ViewBag[转]
    Transact-SQL的除法问题
  • 原文地址:https://www.cnblogs.com/rookiezjz/p/12688761.html
Copyright © 2020-2023  润新知