从寄存器中读取数据

Tutorial: 汇编基础 Category: C语言 Published: 2026-04-07 13:58:26 Views: 21 Likes: 0 Comments: 0
  1. 数据的存储 1 个内存单元 = 1 Byte = 1 字节型数据 = 8bit = 0 - 255 2 个连续的内存单元 = 2 Byte = 2 字节型数据 = 16bit = 1 个 字 型数据 = 0 - 65535
内存单元      数据
0H           20H
1H           4EH
2H           78H
3H           FFH
4H           00H
5H           00H
6H           00H
7H           00H
8H           00H
9H           00H
AH           00H
BH           00H
CH           00H
DH           00H
EH           00H
FH           00H
10H

0地址内存单元存放的 字节型数据   20H
0地址内存单元存放的 字型数据     4E20H
1地址内存单元存放的 字节型数据   4EH
1地址内存单元存放的 字型数据     784EH
  1. 从 DS 中读取数据, 默认的段地址是 DS
Z:\>DEBUG
-d 2000:0 F
2000:0000  11 22 33 44 00 10 B2 10-EF FE 0F 0E 00 00 00 00
-a
0DAB:0100 mov bx,2000
0DAB:0103 mov ds,bx  # 段地址DS变成2000
0DAB:0105 mov al,[0] # 将DS中的数据读取到AL中, AL只能读取低八位
0DAB:0108
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0DAB ES=0DAB SS=0DAB CS=0DAB IP=0100 NV UP EI NG NZ NA PO NC
0DAB:0100 BB0020            mov     BX,2000
-t
AX=0000 BX=2000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0DAB ES=0DAB SS=0DAB CS=0DAB IP=0103 NV UP EI NG NZ NA PO NC
0DAB:0103 8EDB              mov     DS,BX
-t
AX=0000 BX=2000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=0105 NV UP EI NG NZ NA PO NC
0DAB:0105 A00000            mov     AL,[0000]                        DS:0000=11
-t
AX=0011 BX=2000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=0108 NV UP EI NG NZ NA PO NC
0DAB:0108 726C              JB      0176

# 从DS(2000:0)中读取第1个字(3322)到AX中
-a
0DAB:0108 mov ax,[1]
0DAB:010B
-d 2000:0 F
2000:0000  11 22 33 44 00 10 B2 10-EF FE 0F 0E 00 00 00 00
-r
AX=0011 BX=2000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=0108 NV UP EI NG NZ NA PO NC
0DAB:0108 A10100            mov     AX,[0001]                      DS:0001=3322
-t
AX=3322 BX=2000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=010B NV UP EI NG NZ NA PO NC
0DAB:010B BFAD00            mov     DI,00AD

# 将DS第1个字(3322)的低八位读取到BL中
-d ds:0 F
2000:0000  11 22 33 44 00 10 B2 10-EF FE 0F 0E 00 00 00 00
-a
0DAB:010B mov bl,[1]
0DAB:010F
-t
AX=3322 BX=2022 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=010F NV UP EI NG NZ NA PO NC
0DAB:010F 0808              OR      [BX+SI],CL                       DS:2022=00
  1. 检测点 将 AL 中的数据(EFH), 读取到内存单元 10000H 中
Z:\>DEBUG
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0DAB ES=0DAB SS=0DAB CS=0DAB IP=0100 NV UP EI NG NZ NA PO NC
0DAB:0100 C3                RET
-a
0DAB:0100 mov al,EF
0DAB:0102 mov bx,1000
0DAB:0105 mov ds,bx
0DAB:0107 mov [0],al
0DAB:010A
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0DAB ES=0DAB SS=0DAB CS=0DAB IP=0100 NV UP EI NG NZ NA PO NC
0DAB:0100 B0EF              mov     AL,EF
-t
AX=00EF BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0DAB ES=0DAB SS=0DAB CS=0DAB IP=0102 NV UP EI NG NZ NA PO NC
0DAB:0102 BB0010            mov     BX,1000
-t
AX=00EF BX=1000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0DAB ES=0DAB SS=0DAB CS=0DAB IP=0105 NV UP EI NG NZ NA PO NC
0DAB:0105 8EDB              mov     DS,BX
-t
AX=00EF BX=1000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=1000 ES=0DAB SS=0DAB CS=0DAB IP=0107 NV UP EI NG NZ NA PO NC
0DAB:0107 A20000            mov     [0000],AL                        DS:0000=00
-t
AX=00EF BX=1000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=1000 ES=0DAB SS=0DAB CS=0DAB IP=010A NV UP EI NG NZ NA PO NC
0DAB:010A 008A1E01          add     [BP+SI+011E],CL                  SS:011E=81
-d ds:0 F
1000:0000  EF 00 FF FF FF FF FF FF-FF 00 00 00 38 6C 60 F8 ............8l`.
  1. 检测点 物理内存地址中的数据如下 20000H 23H 20001H 11H 20002H 22H 20003H 66H

    执行如下指令, 寄存器中的内容是 mov ax,2000H mov ds,ax mov ax,ds:[0] mov bx,ds:[2] mov cx,ds:[1] add bx,ds:[1] add cx,ds:[2]

分析:
    23 11 22 66
    mov ax,2000H         AX = 2000H
    mov ds,ax            DS = 2000H (物理地址20000H)
    mov ax,ds:[0]        AX = 1123H
    mov bx,ds:[2]        BX = 6622H
    mov cx,ds:[1]        CX = 2211H
    add bx,ds:[1]        BX = 2211H + 6622H = 8833H
    add cx,ds:[2]        CX = 6622H + 2211H = 8833H

# 实战
Z:\>DEBUG
-e 2000:0
2000:0000  11.23   22.11   33.22   44.66   00.
-d 2000:0 F
2000:0000  23 11 22 66 00 10 B2 10-EF FE 0F 0E 00 00 00 00
-a
0DAB:0100 mov ax,2000
0DAB:0103 mov ds,ax
0DAB:0105 mov ax,[0]
0DAB:0108 mov bx,[2]
0DAB:010C mov cx,[1]
0DAB:0110 add bx,[1]
0DAB:0114 add cx,[2]
0DAB:0118
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0DAB ES=0DAB SS=0DAB CS=0DAB IP=0100 NV UP EI NG NZ NA PO NC
0DAB:0100 B80020            mov     AX,2000
-t
AX=2000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0DAB ES=0DAB SS=0DAB CS=0DAB IP=0103 NV UP EI NG NZ NA PO NC
0DAB:0103 8ED8              mov     DS,AX
-t
AX=2000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=0105 NV UP EI NG NZ NA PO NC
0DAB:0105 A10000            mov     AX,[0000]                      DS:0000=1123
-t
AX=1123 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=0108 NV UP EI NG NZ NA PO NC
0DAB:0108 8B1E0200          mov     BX,[0002]                      DS:0002=6622
-t
AX=1123 BX=6622 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=010C NV UP EI NG NZ NA PO NC
0DAB:010C 8B0E0100          mov     CX,[0001]                      DS:0001=2211
-t
AX=1123 BX=6622 CX=2211 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=0110 NV UP EI NG NZ NA PO NC
0DAB:0110 031E0100          add     BX,[0001]                      DS:0001=2211
-t
AX=1123 BX=8833 CX=2211 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=0114 OV UP EI NG NZ NA PE NC
0DAB:0114 030E0200          add     CX,[0002]                      DS:0002=6622
-t
AX=1123 BX=8833 CX=8833 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=0118 OV UP EI NG NZ NA PE NC
0DAB:0118 0000              add     [BX+SI],AL                       DS:8833=00
  1. add 加法练习 将一段内存中连续的三个字型数据相加放到 AX 中 段为 20000H:12 34 99 88 FF EE
Z:\>DEBUG
-d 2000:0 F
2000:0000  12 34 99 88 FF EE B2 10-EF FE 0F 0E 00 00 00 00 .4..............
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0DAB ES=0DAB SS=0DAB CS=0DAB IP=0100 NV UP EI NG NZ NA PO NC
0DAB:0100 C3                RET
-a
0DAB:0100 mov bx,2000
0DAB:0103 mov ds,bx
0DAB:0105 mov ax,0
0DAB:0108 add ax,[0]
0DAB:010C add ax,[2]
0DAB:0110 add ax,[4]
0DAB:0114
-t
AX=0000 BX=2000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=0DAB ES=0DAB SS=0DAB CS=0DAB IP=0103 NV UP EI NG NZ NA PO NC
0DAB:0103 8EDB              mov     DS,BX
-t
AX=0000 BX=2000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=0105 NV UP EI NG NZ NA PO NC
0DAB:0105 B80000            mov     AX,0000
-t
AX=0000 BX=2000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=0108 NV UP EI NG NZ NA PO NC
0DAB:0108 03060000          add     AX,[0000]                      DS:0000=3412
-t
AX=3412 BX=2000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=010C NV UP EI PL NZ NA PE NC
0DAB:010C 03060200          add     AX,[0002]                      DS:0002=8899
-t
AX=BCAB BX=2000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=0110 NV UP EI NG NZ NA PO NC
0DAB:0110 03060400          add     AX,[0004]                      DS:0004=EEFF
-t
AX=ABAA BX=2000 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2000 ES=0DAB SS=0DAB CS=0DAB IP=0114 NV UP EI NG NZ AC PE CY
0DAB:0114 030E0200          add     CX,[0002]                      DS:0002=8899
Prev: ASCLL码 Next: