思考:某内存单元的段地址为12000H,偏移地址为300H, 请计算该内存单元的物理地址是多少? 实验:在 DEBUG查看该单元的内容。 12000H 物理地址PA=段地址+偏移地址 +300HI 12000+300=12300H 12300H D:> DEBUG Y 进入 DEBUG 10000H D1200:300 ;查看1200:300单元内容 +2300H D1000:2300;查看1000:2300单元内容 12300H D1230:0女 ;查看1230:0单元内容 2300H Q丝 ;退出 DEBUG OH 12300H ●不同的段地址和偏移地址构成相同的物理地址, 说明什么?它们看到的是同一个单元吗?
思考: 某内存单元的段地址为12000H, 偏移地址为 300H, 请计算该内存单元的物理地址是多少? 实验: 在DEBUG查看该单元的内容。 物理地址PA = 段地址 + 偏移地址 = 12000 + 300 = 12300H D:\> DEBUG ;进入DEBUG -D 1200:300 ;查看1200:300 单元内容 -D 1000:2300 ;查看1000:2300 单元内容 -D 1230:0 ;查看1230:0 单元内容 - Q ;退出DEBUG ⚫不同的段地址和偏移地址构成相同的物理地址, 说明什么? 它们看到的是同一个单元吗? 12000H + 300H 12300H 10000H + 2300H 12300H 12300H + 0H 12300H
物理地址相同,就选中同一单元 地址12300H=00010010001100000000B 20根地址线:A9A6A2 Ao 寄存器组 AHAL AX BX CH CX DHDL」DX IP 地址加法器 地址总线AB 指令1 地」指令2 DI BP 数据总线DB 指令3 数据暂存器 址↓指令4 译 指令队列 总线控制总线CB 数据1 运算器 接口 控制 码十数据2 电路 器数据3 指令译码器 PSW标志 寄存器 执行部件控制电路 通过此例说明,每个内存单元有唯一的物理地址 但可由不同的段地址和偏移地址构成
通过此例说明,每个内存单元有唯一的物理地址, 但可由不同的段地址和偏移地址构成。 物理地址相同,就选中同一单元 DS ES SS CS IP 数据暂存器 PSW标志 寄存器 执行部件控制电路 指令译码器 AX BX CX DX AH BH CH DH SI DI BP SP AL BL CL DL 寄存器组 指 令 队 列 总线 接口 控制 电路 运 算 器 地 址 加 法 器 、、、 指令1 指令2 指令3 指令4 、、、 数据1 数据2 数据3 、、、 地址总线AB 数据总线DB 控制总线CB 地 址 译 码 器 地址12300H = 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 B 20根地址线: A19 A16 A12 A0
实验:利用 DEBUG学习寻址方式 在 DEBUG下汇编下列指令,并查看每条指令执行后的结果: MOV BX, 2000h MOV BXL, CS 思考:如何查看指令MOBX],CS执行后的结果? 用R命令可以吗? 操作数BX]在哪里? 它的内存地址如何构成?
实验:利用DEBUG学习寻址方式 在DEBUG下汇编下列指令,并查看每条指令执行后的结果: MOV BX, 2000h MOV [BX], CS 思考:如何查看指令MOV [BX], CS 执行后的结果? 用R命令可以吗? 操作数[BX]在哪里? 它的内存地址如何构成?
D:> DEBUG冷 ;进入 DEBUG A女 ;汇编指令 126C:0100 MOV BX,2000≌ 126C:0103MOv[Bx,CS≌ 126C:0105女 R 查看指令执行前寄存器的内容 AX=0000BX=0000CX0000DX=0000SP= FFEE BE=0000SI=0000DI=0000 DS=126C ES=126C SS=126C CS=126C IP=0100 NV UPEIPLNZNA PO NC 126C:0100B83412 MOV AX,1234 DDS:2000L20女 ;查看指令执行前内存单元的内容 126C:20000044CD21881634DB-F6C2807433A033D4D.4..t3.3. 126C:2010240C7509A051DC0A-064DDC74197A21A8$.u.Q…M.tz T=100 ;单步执行指令 AX=0000BX=2000CX0000DX=0000SP= FFEE BE=0000SI=0000DI=0000 DS=126C Es=126C SS=126C CS=126C P=0103 NVUP EIPL NA PO NC 126C:01038C0F MOV BX,CS DS:2000=4400 T女 ;单步执行指令 AX=0000BX=2000CX=0000DX=0000SP= FFEE BP=0000SI=0000DI=0000 DS=126C ES=126C SS=126C CS=126C IP=0105 NV UP EI PL NZ NA PO NO 126C:01050475 ADD AL.75 -DDS:2000L10女 ;查看指令执行后内存单元的内容 126C:20006C12CD21881634DB-F6C2807433A033D4L!.4..13.3. -Q台
D:\>DEBUG ;进入DEBUG -A ;汇编指令 126C:0100 MOV BX, 2000 126C:0103 MOV [BX], CS 126C:0105 -R ;查看指令执行前寄存器的内容 AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=126C ES=126C SS=126C CS=126C IP=0100 NV UP EI PL NZ NA PO NC 126C:0100 B83412 MOV AX,1234 -D DS:2000 L20 ;查看指令执行前内存单元的内容 126C:2000 00 44 CD 21 88 16 34 DB-F6 C2 80 74 33 A0 33 D4 .D.!..4....t3.3. 126C:2010 24 0C 75 09 A0 51 DC 0A-06 4D DC 74 19 7A 21 A8 $.u..Q...M.t.z!. -T=100 ;单步执行指令 AX=0000 BX=2000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=126C ES=126C SS=126C CS=126C IP=0103 NV UP EI PL NZ NA PO NC 126C:0103 8C0F MOV [BX],CS DS:2000=4400 -T ;单步执行指令 AX=0000 BX=2000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=126C ES=126C SS=126C CS=126C IP=0105 NV UP EI PL NZ NA PO NC 126C:0105 0475 ADD AL,75 -D DS:2000 L10 ;查看指令执行后内存单元的内容 126C:2000 6C 12 CD 21 88 16 34 DB-F6 C2 80 74 33 A0 33 D4 l..!..4....t3.3. -Q
下面程序段欲完成(800:4001)←(200100H),错在哪里? l.mov[800:400h],[200:100h 课外作业4讨论 2. mov ax,200:100h mov 800: 400h. ax 4. mov ax. 200h 3. mov ds, 200h mov ds. ax nov bX 100h mov ax, 800h mov ds。800h mov es. aX mov 400h bx mov es: 400h , 100h 5. mov ax. 200h mov ax. 200h 7. mov ax, 200h mov ds. ax mov ds. ax mov ds. ax mov bx, [ 100h mov bx, 100h mov bx. 100h mov ax. 800h mov ax. 800h mov ax. 800h mov ds. ax mov ds. ax mov es. aX mov ax. 400h mov Cx,400h mov si. 400h mov ax, bx mov cx. bx mov es: si. bx
下面程序段欲完成 (800:400H) ← (200:100H) , 错在哪里? 5. mov ax, 200h mov ds, ax mov bx, [100h] mov ax, 800h mov ds, ax mov ax, 400h mov [ax], bx 4. mov ax, 200h mov ds, ax mov ax, 800h mov es, ax mov es:[400h], [100h] 6. mov ax, 200h mov ds, ax mov bx, [100h] mov ax, 800h mov ds, ax mov cx, [400h] mov cx, bx 3. mov ds, 200h mov bx, [100h] mov ds, 800h mov [400h], bx 7. mov ax, 200h mov ds, ax mov bx, 100h mov ax, 800h mov es, ax mov si, 400h mov es: si, bx 2. mov ax, 200:100h mov 800:400h, ax 1. mov [800:400h], [200:100h] 课外作业4讨论
几类常犯错误: 不会编程操作存储单元 编程1,2中的错 1.Mov[800:400H,[200:100H MOV AX. 200: 100H MOV 800: 400H. AX (1)先设置存储单元的段地址,偏移地址 MOV AX. 200h 2A MOV DS. AX DS: BX 3B MOV BX. 100h 200:100H→10 20 (2)再确定是做源操作数,还是目的操作数 MOV AX, BXI 源用寄存器间接寻址 MOV BX, DX ;目的 MOV AX, 100H 源 MOV 100H, DX ;目的采用直接寻址
一. 不会编程操作存储单元 编程1,2中的错 几类常犯错误: 2. MOV AX, 200:100H MOV 800:400H, AX 1. MOV [800:400H], [200:100H] (1) 先设置存储单元的段地址, 偏移地址 MOV AX, 200h MOV DS, AX MOV BX, 100h 3B 2A 10 20 200:100H DS:BX ;源 ;目的 (2) 再确定是做源操作数,还是目的操作数 MOV AX , [BX] MOV [BX], DX 采用寄存器间接寻址 MOV AX , [100H] MOV [100H], DX ;源 ;目的 采用直接寻址
(3)编程时注意两个单元的段值不同,(800400H)←(200:100H) 要根据采用的寻址方式,对相应的段寄存器赋值。 MOV AX. 200H MOV AX. 200H MOV DS. AX MOV DS. AX MOV BX, 100H MOV BX, 100H MOⅤAX.800H MOV AX. 800H MOV SS. AX MOV DS. AX MOV BP. 400H MOV 400HI, BX MOV BPI, BX 虽然能完成功能,但由于更改了堆栈 (4)注意指令顺序 在一般的数据传送中,建议不使用[BP] MOV AX. 200H MOV AX. 200H MOV DS. AX MOV DS. AX MOV AX. 800H MOV AX. 800H MOV DS. AX MOV ES. AX MOV BX, 100H MOV BX, 100H MOV 400HI, BX MOV ES: 400H, BX 完成(800:400h)←(800:100h) 完成800:400h)←(200100h)
(3) 编程时注意两个单元的段值不同, (800:400H) (200:100H) 要根据采用的寻址方式,对相应的段寄存器赋值。 MOV AX, 200H MOV DS, AX MOV BX, [100H] MOV AX, 800H MOV DS, AX MOV [400H], BX 虽然能完成功能,但由于更改了堆栈, 在一般的数据传送中,建议不使用[BP] MOV AX, 200H MOV DS, AX MOV BX, [100H] MOV AX, 800H MOV SS, AX MOV BP, 400H MOV [BP], BX (4) 注意指令顺序 MOV AX, 200H MOV DS, AX MOV AX, 800H MOV DS, AX MOV BX, [100H] MOV [400H], BX 完成(800:400h) (800:100h) MOV AX, 200H MOV DS, AX MOV AX, 800H MOV ES, AX MOV BX, [100H] MOV ES:[400H], BX 完成(800:400h) (200:100h)
二.立即数直接传送给段寄存器 MOV AX. 200H 3. MOV DS, 200H MOV DS. AX MOV BX, 100H MOV DS. 800H MOV AX. 800H MOV[400H], BX MOV DS, AX 三.两个操作数均为存储器 4. MOV AX 200H MOV DS, AX MOV AX 800H MOV ES, MOV ES:|400H],[100H MOV AX, 100H MOV ES: 400H], AX
二. 立即数直接传送给段寄存器 三. 两个操作数均为存储器 4. MOV AX, 200H MOV DS, AX MOV AX, 800H MOV ES, AX MOV ES:[400H], [100H] 3. MOV DS, 200H MOV BX, [100H] MOV DS, 800H MOV [400H], BX MOV AX, 200H MOV DS, AX MOV AX, [100H] MOV ES:[400H], AX MOV AX, 800H MOV DS, AX
四寻址方式错(只能用BX,BP,SI,D存放偏移地址) lAX CX DX BX+BPI SI+DI 5. MOV AX. 200H MOV DS. AX MOV BX, 100HI MOV AX. 800H MOV DS. AX MOV DX. 400H MOV DI 400H MOV DX, BX MOV DI, BX
5. MOV AX, 200H MOV DS, AX MOV BX, [100H] MOV AX, 800H MOV DS, AX MOV DX, 400H MOV [DX], BX MOV DI, 400H MOV [DI], BX 四. 寻址方式错 (只能用BX, BP, SI, DI存放偏移地址) [AX] [CX] [DX] [BX+BP] [SI+DI]
五.分不清立即数,寄存器和存储器操作数 寄存器在CPU內部,存储器操作数在内存中 7. MOV AX, 200H MOV DS. AX MOV BX, 100H- MOV BX, [100H MOV AX. 800H MOV ES. AX MOV SI. 400H MOV ES: SI BX MOV ES:S∏,BX 6. MOV AX, 200H MOV DS. AX MOV BX, 100H MOV AX. 800H MOV DS, AX MOV CX, 400HI MOV CX. BX MOV 400H, BX
五. 分不清立即数,寄存器和存储器操作数 寄存器在CPU内部,存储器操作数在内存中 7. MOV AX, 200H MOV DS, AX MOV BX, 100H MOV AX, 800H MOV ES, AX MOV SI, 400H MOV ES: SI, BX MOV BX, [100H] MOV ES:[SI], BX 6. MOV AX, 200H MOV DS, AX MOV BX, [100H] MOV AX, 800H MOV DS, AX MOV CX, [400H] MOV CX, BX MOV [400H], BX