汇编语言——王爽(01)

8086 CPU 有20位地址总线,CPU 一次只能传输16位

 地址加法器采用 ------物理地址 = 段地址 * 16 + 偏移地址

 

 

 DS

读取 10000H单元中的内容:

            mov bx,1000h  //

            mov ds,bx  //    错误示范 mov ds,1000H,8086CPU不支持直接将数据输入到段 寄存器中

            mov al,[0]  // [.....]中的 0  标示内存单元的偏移地址

                  // 8086 CPU 自动取 ds 中的数据为内存单元的段地址

写入数据到10000H:

            mov bx,1000H

            mov ds,bx

            mov [0],al

mov 、add、sub指令

mov 指令有以下几种形式

  1. mov  寄存器,数据
  2. mov 寄存器,寄存器
  3. mov 寄存器,内存单元
  4. mov 内存单元,寄存器/段寄存器
  5. mov 段寄存器,寄存器/内存单元
  6. mov    寄存器,段寄存器

add sub,缺少对段寄存器的操作

栈是一种具有特殊的访问方式的存储空间,---------最后进入的数据最先出去。LIFO (Last in frist out)

PUSH(入栈)以字为单位进行

POP(出栈)

SS 段寄存器------------栈顶的段地址

和SP寄存器------------偏移地址==================SS:SP指向栈顶元素

  •  将 10000H—1000FH 这段空间当作栈,初始状态栈是空的
  • 设置 AX = 001AH,BX = 001BH
  • 将 AX,BX 中的数据入栈
  • 然后将 AX,BX清零
  • 从栈中恢复 AX,BX原来的内容

      mov ax,1000h

      mov ss,ax

      mov sp,0010h  //栈底

      mov ax,001ah

      mov bx,001bh

      push ax  // 入栈指令 SP-2

      push bx

      sub ax,ax

      sub bx,bx

      pop bx

      pop ax  // 出栈指令 SP+2

编写第一个程序

assume cs:codesg
codesg segment
start :mov ax,0123h
mov bx,0456h
add ax,bx
add ax,ax

mov ax,4c00h
int 21h
codesg ends
end

dosbox 使用方法:见网页--------->>>>>https://www.jb51.net/softs/709793.html

程序的调试方法:debug   +  r  

 CX:表示程序的长度

.DOS系统中.EXE文件中的程序加载过程:

 DS:表示PSP的段地址 SA,,PSP占256字节------------------>>>> 程序的物理地址为 SA*16+256 = (SA+16)*16+0

U 命令显示机器码及其对应的地址

原文地址:https://www.cnblogs.com/xwtstudio/p/12490201.html