2021-09-16 16:09:31

8.数据处理的两个基本问题

8.数据处理的两个基本问题

[TOC]

基本问题

  1. 处理的数据在什么地方
  2. 要处理的数据有多长?

这两个问题,在机器指令中必须给以明确或隐含的说明,否则计算机就无法工作。

增加2个符号:

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

只有这4个寄存器可用于内存寻址中的存放偏移量。

他们之间可以组合,但是只有 bx和si, bx和di, bp和si, bp和di 4中组合,用于间接寻址中 2个变量, 2个变量+常量 这两种场景。

变量中有bp时,默认的段地址存放在ss中,其他情况段地址在ds中。

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

数据处理指令分类:

  • 读取

  • 写入

  • 运算

数据指令处理前,数据可能在内存中,cpu内部,端口中。

机器码 汇编指令 指令执行前数据的位置
8E1E0000 mov bx,[0] 内存:ds:0 单元
89C3 mov bx,ax cpu内部,ax寄存器
BB0100 mov bx,1 cpu内部,指令缓冲器

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

立即数(idata)

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

mov ax,1
add bx, 2000h
or bx, 00010000b
mov al,'a'

寄存器

mov ax,bx

段地址和偏移地址

内存中的数据用短地址和偏移地址表达。

mov ax, [bx]

寻址方式

image-20210916111207488

指令要处理的数据有多长

8086CPU的指令,可以处理两种大小的数据,byte和word。所以在机器指令中要指明,指令进行的是字操作还是字节操作。

寄存器名 暗示了数据的类型

mov ax,1 就是字操作

mov mov al, 1 就是字节操作

x ptr 明确指示。x为word or byte。

mov word ptr ds:[0], 1 为字操作

mov byte ptr ds:[0],1 为字节操作

其他

有些指令默认了访问的是字单元还是字节单元。如push, 因为push指令只进行字操作。

寻址方式的综合应用

div指令

div是除法指令,使用div做除法的时候应注意以下问题。

  1. 除数:有8位和16位两种,在一个寄存器或内存单元中。
  2. 被除数:默认放在ax 或 ax和ax中。如果是 16位/8位,默认在ax中存放;如果是32位/16位,在dx和ax中存放,dx存放高16位,1x存放低16位。
  3. 结果:如果除数为8位,则AL存商,AH存余数。如果除数为16位,则AX存商,DX存余数。

举例:

div word ptr es:[0]

解释:

除数为16位,存放在内存中。(idata) =( (es)*16+0)

被除数为32位,在dx和ax中存放。所以是$ ((dx)*10000H+(ax)) \div ((es)*16+0)$ 商存放到ax中,余数存放到dx中。

伪指令dd

定义数据的

db define byte 定义一个字节。

dw define word 定义一个字,2个字节。

dd define double word 定义2个字,4个字节。

dup

dup是一个操作符,在汇编语言中同db、dw、dd等一样,也是由编译器识别处理的符号。和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复。

db 3 dup (0)

释义: 定义3个字节,每个字节的值都是0. 等价于db 0,0,0

db 3 dup (0,1,2)

释义: 定义9个字节,它们是0、1、2、0、1、2、0、1、2。等价于db 0,1,2,0,1,2,0,1,2

number dup data data为定义的数据。number为重复次数。

本文链接:http://blog.go2live.cn/post/assemble-8.html

-- EOF --