第三章寻址方式 3.1数据寻址方式 3.2指今寻址方式 3.3跨段的有关问题 3.4实模式与保护模式 3.5综合举例
第三章 寻址方式 3.1 数据寻址方式 3.2 指令寻址方式 3.3 跨段的有关问题 3.4 实模式与保护模式 3.5 综合举例 1
什么是寻址方式? 通常,执行一条带有操作数的指令需要指明 两个问题,一是进行什么操作?二是操作数在那 里?我们将寻找数据和指令存放地址的方式称为 寻扯方式。操作数在计算机运行过程中可能存储 的物理位置有指令、CPU、存储器、接口等;不 同的存储位置所采用的寻址方式不同
什么是寻址方式? 通常,执行一条带有操作数的指令需要指明 两个问题,一是进行什么操作?二是操作数在那 里?我们将寻找数据和指令存放地址的方式称为 寻扯方式。操作数在计算机运行过程中可能存储 的物理位置有指令、CPU、存储器、接口等;不 同的存储位置所采用的寻址方式不同。 2
3.1数据寻址方式 数据寻址方式即寻找操作数地址的方式,。 在8086/80286中只能使用16位寻址,而 80386及其后继机型则既可用16位寻址,也 可用32位寻址,无论多少位寻址实质都是 寻找操作数的物理地址。物理地址是由段 地址和偏移地址两部分组成,段地址存放 在相应的段寄存器中,偏移地址存储在相 应的地址寄存器中,偏移地址又称有效地 址
3.1 数据寻址方式 数据寻址方式即寻找操作数地址的方式, 在8086/80286中只能使用16位寻址,而 80386及其后继机型则既可用 及其后继机型则既可用16位寻址,也 可用32位寻址,无论多少位寻址实质都是 寻找操作数的物理地址。物理地址是由段 地址和偏移地址两部分组成,段地址存放 在相应的段寄存器中,偏移地址存储在相 应的地址寄存器中,偏移地址又称有效地 址。 3
有效地址(偏移地址)的组成: 如果一个操作数存放在存储器中,那么有效地址可以 由以下四部分组成。 1.位移量(displacement)是存放在指令中的一个8 位、16位和32位的数,但它不是立即数,而是一个 地址。 2.基址(base)是存放在基址寄存器中的内容。它 是有效地址中的基址部分,通常用来指向数据段中 数组或字符串的首地址。 3.变址(index)是存放在变址寄存器中的内容。它 通常用来访问数组中的某个元素或字符串中的某个 字符。 888
有效地址(偏移地址)的组成: 如果一个操作数存放在存储器中,那么有效地址可以 由以下四部分组成。 1.位移量 (displacement displacement )是存放在指令中的一个 是存放在指令中的一个 8 位、16位和32位的数,但它不是立即数,而是一个 地址。 2.基址 (base )是存放在基址寄存器中的内容 是存放在基址寄存器中的内容 。 它 是有效地址中的基址部分,通常用来指向数据段中 数组或字符串的首地址 。 3.变址(index)是存放在变址寄存器中的内容。它 通常用来访问数组中的某个元素或字符串中的某个 字符。 4
有效地址(偏移地址)的组成: 4.比例因子是386及其后继机型中新增加寻址方 式中的一个术语,其值可为1,2,4或8。在寻 址中,可用变址寄存器的内容乘以比例因子来 取得变址值。这类寻址方式对访问元素长度为 2,4,8字节的数组特别有用。 有效地址的计算方法可以用下式表示: EA=基址+(变址×比例因子)+位移量(X) 这四个成分中,除比例因子是固定值外,其他 三个成分都可正可负,以保证指针移动的灵活 性。 80
有效地址(偏移地址)的组成: 4.比例因子是386及其后继机型中新增加寻址方 式中的一个术语,其值可为1,2,4或8。在寻 址中,可用变址寄存器的内容乘以比例因子来 取得变址值 。这类寻址方式对访问元素长度为 2,4,8字节的数组特别有用。 有效地址的计算方法可以用下式表示: EA = 基址 +(变址×比例因子)+ 位移量(X) 这四个成分中,除比例因子是固定值外,其他 三个成分都可正可负,以保证指针移动的灵活 性 。 5
3.1.116位寻址 16位寻址方式是指操作数的偏移地址 由16位二进制数组成,段地址保存在 DS、ES、SS、CS中,20位物理地址是 由段地址左移4位二进制加上操作数的 偏移地址形成,最大寻址空间为1MB
3.1.1 16位寻址 16位寻址方式是指操作数的偏移地址 由16位二进制数组成,段地址保存在 DS、ES、SS、CS中,20位物理地址是 由段地址左移 4位二进制加上操作数的 偏移地址形成,最大寻址空间为1MB。 6
1.立即寻址 在该寻址方式中,操作数直接存放在指令内,且 紧跟在指令操作码之后,指令码和操作数都存 放在代码段中。 汇编格式:n 操作数位置:指令 功能:指令码下一单元的内容即为操作数n,操 作数存放在指令中。 指令 操作数n
1. 立即寻址 在该寻址方式中,操作数直接存放在指令内,且 紧跟在指令操作码之后,指令码和操作数都存 放在代码段中。 汇编格式:n 操作数位置:指令 功能:指令码下一单元的内容即为操作数n,操 作数存放在指令中。 指令 操作数n 7
立即寻址例题 例3.1M0V AX,2000H 说明:M0V是双操作数指令,功能是实现数据传 送。该指令的目的操作数是AX,源操作数是 2000H,反汇编代码为B80020,其中指令长度 为3个字节,立即数2000H占两个字节,且紧跟 在指令操作码之后存放在代码段之中。 执行前:(AX)=0000H 执行后:(AX)=2000H
立即寻址例题 例3.1 MOV AX 3.1 MOV AX,2000H 说明:MOV是双操作数指令,功能是实现数据传 送。该指令的目的操作数是 该指令的目的操作数是AX,源操作数是 2000H,反汇编代码为B80020,其中指令长度 为3个字节,立即数2000H占两个字节,且紧跟 在指令操作码之后存放在代码段之中。 执行前:(AX)=0000H 执行后:(AX)=2000H。 8
2.直接寻址 在该寻址方式中,指令直接给出了操作数的偏移地址, 操作数存放在存储器内,操作数的偏移地址与操作码 一起存放在指令中,且紧跟在指令码之后。要想存取 操作数必须首先生成物理地址,操作数物理地址是由 段地址和偏移地址EA相加而成,默认段为数据段。 汇编格式:[n]或含有变量的地址表达式 操作数位置:存储器 功能:n或含有变量的地址表达式的值是操作数的偏移 地址EA,且存放在指令的下一个字单元中,但操作数 存放在存储器中。 段基地址 指令 存储器 EA ⊕ 操作数
2. 直接寻址 在该寻址方式中,指令直接给出了操作数的偏移地址, 操作数存放在存储器内,操作数的偏移地址与操作码 一起存放在指令中,且紧跟在指令码之后。要想存取 操作数必须首先生成物理地址,操作数物理地址是由 段地址和偏移地址EA相加而成,默认段为数据段。 汇编格式:[n]或含有变量的地址表达式 操作数位置:存储器 功能:n或含有变量的地址表达式的值是操作数的偏移 地址EA,且存放在指令的下一个字单元中,但操作数 存放在存储器中。 段基地址 EA 指令 存储器 ⊕ 操作数 9 EA
直接寻址例题 例3.2M0VAX,[2000H] 说明:源操作数采用直接寻址方式,指令码下一字单元的内容 2000H为源操作数的EA,操作数存放在存储器中。 执行前:(DS)=3000H, 执行后:(AX)=5050H 例3.3 MOV AX,BUFA 说明:源操作数采用直接寻址方式,指令码下一字单元的内容 为变量BUPA的EA,操作数存放在存储器变量BUFA所指向的存 储单元中。指令功能是将字类型变量BUFA的内容送入AX之中 执行前:假定BUFA在数据段中定义,EA=1000H,(DS) = 2000H,(AX)=1122H,(21000)=1259H, 执行后:(AX)=1259H 10
直接寻址例题 例3.2 MOV AX,[2000H] 说明:源操作数采用直接寻址方式,指令码下一字单元的内容 2000H为源操作数的EA,操作数存放在存储器中。 执行前:(DS)=3000H, 执行后:(AX)=5050H 例3.3 MOV AX,BUFA 说明:源操作数采用直接寻址方式,指令码下一字单元的内容 为变量BUFA的EA,操作数存放在存储器变量BUFA所指向的存 储单元中。指令功能是将字类型变量BUFA的内容送入AX之中。 执行前:假定BUFA在数据段中定义 在数据段中定义,EA=1000H,(DS)= 2000H,(AX)=1122H,(21000)=1259H, 执行后:(AX)=1259H 10 执行后:(AX)=1259H