汇编语言——王爽(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 指令有以下几种形式
- mov 寄存器,数据
- mov 寄存器,寄存器
- mov 寄存器,内存单元
- mov 内存单元,寄存器/段寄存器
- mov 段寄存器,寄存器/内存单元
- 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 命令显示机器码及其对应的地址