《汇编语言》第八章-数据处理的两个基本问题

目录:https://blog.csdn.net/qq_43098197/article/details/12453240

计算机进行数据处理、运算,需要两个东西:

  1. 处理的数据在什么地方(地址)
  2. 要处理的数据有多长(数据类型)

bx、si、di、bp

[...] 灵活寻址中,只有这四个寄存器可以使用,其它的不行。

bx 的段寄存器默认使用 ds

bp 的段寄存器默认使用 ss

sidi 不能分为两个 8 位的寄存器。

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

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

数据可以放在:CPU 内部、内存、端口。

在这里插入图片描述

汇编中数据位置的表达

立即数: 也就是常数,机器指令执行前放在 CPU 的指令缓冲器中。

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

寄存器: 要处理的数据在寄存器中。

mov ax, bx
push bx
mov ds:[0], bx

段地址(SA)和偏移地址(EA): 要处理的数据在内存中。

mov ax, [0]
mov ax, [bx] ;SA=DS
mov ax, ds:[bx]
mov ax, [bp] ;SA=SS
mov ax, ss:[bp]

寻址方式

在这里插入图片描述

指令要处理的数据长度

8086CPU 可以处理 byte 和 word 两种长度的数据。

通过寄存器指明要处理的数据长度:

; word
mov ax, 1
mov bx, ds:[0]
mov ds, ax
mov ds:[0], ax
inc ax
add ax, 1000

; byte
mov al, 1
mov al, bl
mov al, ds:[0]
mov ds:[0], al
inc al
add al, 100

使用操作符 X ptr 指明内存单元度:

; word
mov word ptr ds:[0], 1

; byte
mov byte ptr ds:[0], 1

其它方法: 有些指令默认访问的内存单元是字节单元或字单元,例如 push 就只进行字单元操作。

div 指令

除数: 有 8 位和 16 位两种,存储在一个寄存器或内存单元中。

被除数:

  • 若除数为 8 位,被除数为 16 位,则将被除数放到 AX 中。
  • 若除数为 16 位,被除数为 32 位,则将被除数放到 DX(高16位)AX(低16位) 中。

运算结果的存放:

  • 若除数为 8 位,被除数为 16 位,则结果存放到 AX 中,其中 AL 为商,AH 为余数。
  • 若除数为 16 位,被除数为 32 位,则结果存放到 AX 和 DX 中,其中 AX 为商,DX 为余数。

被除数 16 位,除数 8 位

assume cs:code, ds:data

data segment
    db 3, 0, 0, 0, 0
data ends

code segment
    main: mov ax, data
    mov ds, ax
	; your code...
    mov ax, 4c00h
    int 21h
code ends

end main

使用寄存器存储除数与被除数:

mov ax, 0010H ; 16位的被除数
mov bl, 03H   ; 8 位的除数
div bl

将除数放到内存中:

mov ax, 16
div byte ptr ds:[0]

结果:

AX = 0105
AL(商) = 05H = 5
AH(余) = 01H = 1

被除数 32 位,除数 16 位

assume cs:code, ds:data

data segment
    db 01H, 00H, 0A1H, 86H
    db 100
data ends

code segment
    main: mov ax, data
    mov ds, ax
	; your code...
    mov ax, 4c00h
    int 21h
code ends

end main

使用寄存器存储:

mov dx, 0001H ; 32位的高位
mov ax, 86A1H ; 32位的低位
mov bx, 100   ; 16位的除数
div bx

使用内存存储:

mov dx, ds:[0]
mov ax, ds:[2]
div word ptr ds:[4]

结果:

AX(商) = 03E8H = 1000
DX(余) = 0001H = 1

伪指令

dd:定义 dword(double word) 型数据,32 位。

dup:数据的重复。

  • 数据类型 重复的次数 dup (要重复的数据)

  • 例子:

    dp 3 dup (0) 			; 0,0,0
    db 3 dup (0, 1, 2) 		; 0,1,2,0,1,2,0,1,2
    db 3 dup ('ab', 'AB') 	; abABabABabAB
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值