(十七)数据处理和寄存器的用法--汇编笔记

汇编语言

Posted by YiMiTuMi on March 27, 2020

寄存器

定义描述性符号:regsreg

reg 用来表示一个寄存器。

sreg用来表示一个段寄存器。

reg的集合包括:ax bx cx dx ah al bh bl ch cl dh dl sp bp si di

sreg的集合包括: ds ss cs es

bx si di 和 bp

1)在8086CPU中,只有这4个寄存器可以用在[…]中来进行内存单元的寻址。

正确:

mov ax, [bx]

mov ax, [bx + si]

mov ax, [bx + di]

mov ax, [bp]

mov ax, [bp + si]

mov ax, [bp + di]

错误:

mov ax, [cx]

mov ax, [ax]

mov ax, [dx]

mov ax, [ds]

2)在[…]中,这4个寄存器可以单个出现,或只能以4种组合出现:

bx 和 si

bx 和 di

bp 和 si

bp 和 di

正确:

mov ax, [bx]

mov ax, [bp]

mov ax, [si]

mov ax, [di]

mov ax, [bx + si]

mov ax, [bx + di]

mov ax, [bp + si]

mov ax, [bp + di]

mov ax, [bx + si + idata]

mov ax, [bx + di + idata]

mov ax, [bp + si + idata]

mov ax, [bp + di + idata]

错误:

mov ax, [bx + bp]

mov ax, [si + di]

3)只要在[…]中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认保存在ss中

mov ax, [bp] 含义: (ax) = ((ss)*16 + (bp))

mov ax, [bp + idata] 含义: (ax) = ((ss)*16 + (bp) + idata)

mov ax, [bp + di] 含义: (ax) = ((ss)*16 + (bp) + (di))

mov ax, [bp + si + idata] 含义:(ax) = ((ss)*16 + (bp) + (si) + idata)

机器指令处理的数据在什么地方

绝大部分机器指令都是进行数据处理的指令,处理大致可分为3类:读取、写入、运算

在机器指令这一层来讲,并不关心数据的值是多少,而是关心指令执行前一刻,它将要处理的数据所在的位置。

指令执行前,所要处理的数据可以在3个地方:CPU内部、内存、端口。

机器码     汇编指令        指令执行前的位置

8E1E0000  mov bx, [0]    内存,ds:0单元

89C3      mov bx, ax     CPU内部,ax寄存器

BB0100    mov bx, 1      CPU内部,指令缓冲器

汇编语言中数据位置的表达

汇编语言中用3个概念来表达数据的位置。

1)立即数(idata)

 对于直接包含在机器指令中的数据(执行前在CPU的指令缓冲器中),在汇编语言中称为:立即数(idata),在汇编指令中直接给出。

例:

mov ax, 1

add bx, 2000H

or bx, 00010000B

mov al, 'a'

2)寄存器

 指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名。

例:

mov ax, bx

mov ds, ax

push bx

mov ds:[0], bx

push ds

mov ss, ax

mov sp, ax

3)段地址(SA)和偏移地址(EA)

 指令要处理的数据在内存中,在汇编指令中可用[X]的格式给出EA,SA在某个段寄存器中。

mov ax, [0]

mov ax, [di]

mov ax, [bx + 8]

mov ax, [bx + di]

mov ax, [bx + si + 8]

以上这些指令的段地址默认在ds中。

mov ax, [bp]

mov ax, [bp + 8]

mov ax, [bp + si]

mov ax, [bp + di + 8]

以上这些指令的段地址默认在ss中。

mov ax, ds:[bp]

mov ax, es:[bx]

mov ax, ss:[bx + si]

mov ax, cs:[bx + si + 8]

存放段地址的寄存器也可以是显性给出的。

绣球花 – 希望