汇编语言-王爽 笔记(第八章 数据处理的两个基本问题)

目录

数据处理的两个基本问题:

8.1  bx、si、di和bp

(1)8086中只有这四个寄存器可以用在[……]中进行内存单元的而寻址

(2)[……]中四个寄存器出现方式是固定的并不是随意的

(3)只要[……]中使用dp

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

8.3汇编语言中数据位置的表达(三个概念表达数据位置)

(1)立即数(idata)

(2)寄存器       

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

8.4寻址方式

8.5指令要处理的数据有多长

(1)通过寄存器判断所处理数据的尺寸

(2)没有寄存器名称时用X ptr 指明内存单元

(3)push pop 只进行字操作

8.6寻址方式的综合应用

8.7div指令

 8.8伪指令dd

8.9操作符dup


数据处理的两个基本问题:

1:.数据在啥地方

2.数据有多长

此书以后定义两个描述性符号:

1.reg :寄存器 

①.reg:a、b、c、d+x  

②.a、b、c、d对应h和l

③.sp、 bp 、si、 di

2.sreg:段寄存器

①d、e、s、c+s

(可以巧记为:D+键盘上的esc键);

8.1  bx、si、di和bp

(1)8086中只有这四个寄存器可以用在[……]中进行内存单元的而寻址

如下指令均正确: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)[……]中四个寄存器出现方式是固定的并不是随意的

他们可以单独出现 或者

mov ax,[ bx  +si/di]

mov ax,[bp+si/di]

上边的写法si和di后边都可以加数字

而下边这种写法是错误的

mov ax,[bx+bp]

mov ax,[si+di]

(3)只要[……]中使用dp

那么段地址就默认是在ss中

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

mov bx,[0]   数据在内存中 ds:0单元

mov bx,ax  数据在cpu内部 ,ax寄存器

mov bx,1 内部指令缓冲器

8.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

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

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

存放段地址的寄存器可以是默认的,比如

mov ax,[0]

mov ax,[di]

mov ax,[bx+8]

mov ax,[bx+si]

mov ax,[bx+si+8]

以上段地址默认在ds中

mov ax,[bp]

mov ax,[bp+8]

mov ax,[bp+si]

mov ax,[bp+si+8]

等指令段地址默认在ss中;

也可以直接给给出段地址寄存器

如下:

mov ax,ds:[bp]   ds为段地址 bp中存放的值为偏移地址

mov ax,es:[bx]  es为段地址 bx中存放的值为偏移地址

8.4寻址方式

汇编语言-王爽 笔记(第八章 数据处理的两个基本问题)_第1张图片

以上图片源于王爽老师的汇编语言第四版

若有侵权联系删除

8.5指令要处理的数据有多长

8.86cpu 可以处理两种尺寸数据 byte(字节)和word(字)

(1)通过寄存器判断所处理数据的尺寸

ax,bx,dx  均为16位寄存器 所以代表处理数据为一个字

而al   bl 是16位寄存器分成的一个8位寄存器所以是字操作

(2)没有寄存器名称时用X ptr 指明内存单元

例如

inc word ptr [bx]

mov word ptr ds:[0],1

(以上为子、字单元)

mov byte ptr ds:[0],1

访问的就是字节单元了

(3)push pop 只进行字操作

8.6寻址方式的综合应用

               一般来说,我们可以用[bx+idata+si]的方式来访问结构体中的数据。用bx来定位整个结构体,idata定位结构体中的某个数据项,si定位数据项中的每个元素。汇编:[bx].idata、[bx].idata[si]

8.7div指令

div除法指令:使用时应注意以下问题

(1)除数:

有8位和16位两种在一个reg或内存单元中

reg :寄存器 

①.reg:a、b、c、d+x  

②.a、b、c、d对应h和l

③.sp、 bp 、si、 di

(2)被除数 :

默认放在AX     或  AX和DX中

如果除数为8位则被除数为16位

如果除数为16位则被除数为32位在DX和AX中存放

DX存放高16位AX存放低16位

(3)结果

如果除数为8位则AL放商 AH放余数

如果除数为16位  AX放商  DX放余数

  格式如下:

div  除数

div reg

div 内存单元

汇编语言-王爽 笔记(第八章 数据处理的两个基本问题)_第2张图片

汇编语言-王爽 笔记(第八章 数据处理的两个基本问题)_第3张图片

以上图片源于王爽老师的汇编语言第四版

若有侵权联系删除

 8.8伪指令dd

dword (double world)

每一位16进制是由4位2进制转化而来的所以每两位16进制代表一个字节

在dosbox中

汇编语言-王爽 笔记(第八章 数据处理的两个基本问题)_第4张图片

 每一行有16个字节 每一个16进制数据(两位) 即每两个空格隔开的数据是一个字节 16位

(自己的想法,可能不完全对)若有错误欢迎指教。

8.9操作符dup

和dd dw db 一样也是由编译器识别处理的符号

和dd dw db 等数伪指令配合使用,用来表示数据的重复

如db 3 dup (0)

定义了三个字节等同于   db 0,0,0

db 3 dup (0,1,2)

定义了九个字节  0,1,2,0,1,2,0,1,2

相当于 db 0,1,2,0,1,2,0,1,2

db '666'

db 单引号

单引号中有几个字母或数字就是几个字节

dup 的使用格式

db/dw/dd  重复的次数   dup (重复的字节/字/双字型数据)

你可能感兴趣的:(汇编小白笔记,网络安全)