网站开发公司怎么找客户开发工具在哪里 word
news/
2025/10/7 1:25:02/
文章来源:
网站开发公司怎么找客户,开发工具在哪里 word,网站建设如何站内搜索,做直播网站需要手续汇编语言应该是我们如今学的最“低级”的语言了#xff0c;由于如今不会再有人去学机器语言了。而汇编语言还在一些硬件或者嵌入式设备上使用并开发着。下面资料是为了大学的汇编考试整理的资料#xff0c;如今与大家分享#xff0c;希望能给大家提供帮助。 汇编语言程序设计… 汇编语言应该是我们如今学的最“低级”的语言了由于如今不会再有人去学机器语言了。而汇编语言还在一些硬件或者嵌入式设备上使用并开发着。下面资料是为了大学的汇编考试整理的资料如今与大家分享希望能给大家提供帮助。 汇编语言程序设计汇总 计算机主要由运算器、控制器、存储器和输入输出设备五大部件构成。 字长word是指微处理器内部一次能够并行处理二进制代码的位数。它与微处理器内部寄存器以及CPU内部数据总线宽度是一致的字长越长所表示的数据精度就越高。 内存是由若干个存储单元组成每一个单元分配一个固定的地址而且存放一个字节的数据。 MIPS Millions of Instruction Per Second 每秒百万条指令 微机系统採用了多种系统总线标准。如ISA/EISA/VESA/PCI 系统总线分为数据总线、地址总线、控制总线。 Data Bus: DB Address Bus: AB 讨论存储器容量时。以2的10次方即1024为基本单元。称为1K。1024K就是1M。 Control Bus : CB CPU主频越高其运算速度就越快。字长代表了CPU对数据处理的能力和精度。 OS的主要部分是常驻监督程序Monitor仅仅要一开机就存在于内存中能够从用户接收命令并使OS运行对应的动作。 汇编语言和机器语言一一相应。 汇编程序就是用来把由用户编制的汇编程序翻译成机器语言程序的一种系统程序。 高级语言的翻译程序有两种 一种是先把高级语言程序翻译成机器语言或先翻译成汇编语言然后又汇编程序再次翻译成机器语言然后才干在机器上运行。——编译程序 直接把高级语言程序在机器上执行一边解释一边执行。——解释程序 翻译程序包含汇编程序、解释程序、编译程序。 ALU 算术逻辑运算单元用来进行算术和逻辑运算及其对应操作。 8086 CPU内部结构按功能分为 总线接口单元 BIUBus Interface Unit 运行单元 EU: Executive Unit 8086对存储器和IO设备的全部操作都是由BIU完毕的。 8086CPU的20位地址线可直接寻址1M存储器物理空间。但CPU内部寄存器均为16位的寄存器16位寄存器怎样实现20位地址寻址呢 CPU是将有关寄存器内容左移4位然后由专门地址加法器与16位偏移地址相加。形成20位的物理地址。以便找到存储单元。 指令指针 IP Instruction Pointer IP 用来存放下一条要运行指令在代码中的偏移地址。 IP的内容由BIU自己主动改动。使它总是指向下一条要取的指令在现行代码段中的偏移地址。 因为BIU和EU是各自独立并行工作的。在EU运行指令的同一时候BIU可预取以下一条或几条指令。 Flags反映CPU运算中的状态特征和存放某些控制标志。 通用寄存器组 包含4个16位的数据寄存器AX/BX/CX/DX 和4个16位指针与变址寄存器:SP/BP/SI/DI 8086CPU的外部数据总线和内部数据总线都是16位的是真正的16位机。 寄存器能够分为程序可见寄存器和程序不可见寄存器。 程序可见寄存器是指在汇编语言程序设计中用到的寄存器。能够由指令来指定。 程序不可见寄存器指一般程序设计中不用而由系统所用的寄存器。 程序可见寄存器能够分为通用寄存器、专用寄存器和段寄存器。 AX/BX/CX/DX是数据寄存器。用来临时存放计算过程中用到的操作数结果或其它信息。能够以字16位或字节8位形式訪问。都是通用寄存器。但又有各自专用的功能。 AX: Accumulator。做累加器用。是算术运算的主要寄存器。 BX: Base做通用寄存器使。在计算存储器地址时经常使用作基址寄存器。 CXCount作为通用寄存器使用。经常使用来保存计数值。如在移位指令、循环和串处理指令中作隐含的计数器。 DXData可做通用寄存器使用在做双字长运算时把DX和AX组合在一起存放一个双字长数。DX存放高位字。 SP/BP/SI/DI四个16位寄存器能够像数据寄存器一样在运算中存放操作数。但仅仅能以字16位为单位使用。 一般用在存储器寻址时提供偏移地址。 SPStack Pointer:栈指针寄存器用来指示栈顶的偏移地址。 BPBase Pointer:基址指针寄存器。 SISource Index:源变址寄存器 DI: Destination Index:目的变址寄存器 CS:段寄存器 IPInstruction Pointer 是指令指针寄存器。用来存放代码段中的偏移地址。在程序执行中始终指向下一条指令的首地址。与CS连用确定下一条指令的物理地址。 Flags是标志寄存器又称程序状态字寄存器PSW Program Status Word 条件码标志记录程序中执行结果的状态信息是依据有关指令的执行结果由CPU自己主动设置的。这些状态信息作为兴许条件转移指令的转移控制条件。所以称为条件码。 OF: Overflow Flag 溢出标志 SF: Sign Flag 符号标志 ZF: Zero flag 零标志 CF: Carry Flag 进位标志 AF: Auxiliary Carry Flag 辅助进位标志 PF: Parity Flag 奇偶标志 DF :Direction Flag 方向标志 IF: Interrupt Flag 中断标志 段寄存器也是一种专用寄存器。专用于存储器寻址用来直接或间接存放段地址。 CS: Code Segment 代码段寄存器 DS: Data Segment 数据段寄存器 SS: Stack Segment 堆栈段寄存器 ES: Extra Segment 附加段寄存器 一个存储单元中存放的信息称为该存储单元的内容。 在存储单元里以字节为单位存储信息。 假设机器字长为8位时则地址为0004H单元中存放的信息为78H。也就是说该单元的内容为78H。0004H78H 一个字存入存储器要占有连续的两个字节单元。存放时低位字节存入低地址高位字节存入高地址。这样两个字节单元就构成了一个字单元。 字单元的地址用它的低地址表示。0004H5678H 双字单元的存放方式与字单元类似他被存放在相继的4个字节中低位字存入低地址区高位字存入高地址区。双字单元的地址有其最低字节的地址指定。0004H12345678H。 1字2字节 同一个地址既能够作为字节单元的地址又可看做字单元双字单元或四字单元的地址。 假设用X表示某存储单元的地址则X单元的内容能够表示为X假如X单元中存放着Y而Y又是一个地址则可用YX表示Y单元的内容。 eg:0004H5678H5678H又是一个存储单元地址。5678H2F1EH。2F1EH才是真正的内容。 即0004H2F1EH。 在1M的存储器里每个存储单元都有一个唯一的20位地址称为该存储单元的物理地址。 段地址是指每一段的起始地址又称段基地址因为他必须是段的首地址所以低四位一定是0。能够规定段地址仅仅取段起始地址的高16位值。 偏移地址指在段内相对于段起始地址的偏移值。 把段地址左移四位再加上偏移地址就形成物理地址。 物理地址段地址*16D偏移地址 等价于 物理地址段地址*10H偏移地址 专门存放段地址的寄存器。称为段寄存器。 CS代码段 DS数据段 SS堆栈段 ES附加段 每一个段寄存器能够确定一个段的起始地址。 MOV AX,ES:[BX] ES作段寄存器BX作间接寄存器寻址的单元送入AX寄存器。 MOV BX,ES:[SI] ES作段寄存器SI作间址寄存器的寻址单元内容送入BX寄存器。 MOV EAX,DS:[BP] DS作段寄存器BP作间址寄存器寻址的单元内容送入EAX寄存器。 一个计算机的指令集合。就是该计算机的指令系统。 每条指令有两部分组成操作码字段和地址码字段。 操作码字段说明该指令所要完毕的操作即该条指令的性质。 地址码字段描写叙述该指令的操作对象。 一般地址码字段通常是直接给出操作数或者给出操作数存放的寄存器编号或者给出操作数存放的存储单元的地址或有关的地址的信息。 依据地址码字段所给出的地址的个数指令格式可分为零地址、一地址、二地址、三地址、多地址指令。 指令中用于确定操作数存放地址的方法称为寻址方式。 假设地址码字段直接给出了操作数。这样的寻址方式是马上寻址。 假设地址码字段指出了操作数所在的寄存器编号叫寄存器寻址。 假设操作数存放在存储器中。则地址码字段通过各种方式给出了存储器地址。叫存储器寻址。 寻找和获得操作数或操作数存放地址或指令转移地址的方法称为寻址方式。 操作数及操作结果存放的地址有三处存放在指令的地址码字段中。存放在寄存器中存放在存储器的数据段DS、堆栈段SS或附加数据段ES中。 其相应有三种操作数马上操作数、寄存器操作数、存储器操作数 要寻找这些操作数就有三种基本寻址方式马上寻址方式、寄存器寻址方式、存储器寻址方式。 马上寻址方式寻找的操作数紧跟在指令操作码之后。 格式操作码 数字表达式 MOV AX,267 MOV AL,10010011B AND 0FEH MOV AL,PORT1 MOV AX,DATA1 “267”是数字。“10010011B AND 0FEH”是数字表达式PORT1是一个符号名。属于常数。DATA1是定义的段名。就是段地址属于常数。 汇编马上寻址方式时汇编程序首先计算数字表达式的值然后写入指令的地址码字段称为马上数。 寄存器寻址是指要寻找的操作数在某个寄存器中。 格式操作码 寄存器名 MOV AX,BX MOV AL,BL 汇编程序将寄存器的地址编号写入指令的地址码字段当机器运行含有这样的寻址方式的指令时依据地址码字段的编号訪问到寄存器。继而訪问到操作数。 存储器寻址方式当操作数放在存储器中的某个单元时CPU要訪问存储器才干获得该操作数。假设存储器的存储单元是20位通过各种方法算出段内偏移地址有效地址。结合段地址形成20位物理地址找到操作数称为存储器寻址。 直接寻址方式是指要寻找的操作数的地址在指令中直接给出。 格式 操作码 地址表达式 操作码 [地址表达式] 操作码 [数字表达式] 如如果TABLE是在数据段定义的一个字节数组的首地址标号偏移地址为1000H MOV AL,TABLE MOV AL,[TABLE] MOV AL,[1000H] 是等价的。 直接寻址方式默认的段地址是DS。 若同意在汇编指令中指定除DS寄存器以外的段寄存器作为操作数的段地址。这就是段超越。 用段超越前缀表示 段寄存器名地址表达式 段寄存器名[地址表达式] 段寄存器名数字表达式 段寄存器名[数字表达式] 如 设TABLE是在附加数据段定义的一个字节数组的首地址标号其偏移地址为1000H。则 MOV AL,ES:TABLE MOV AL,ES:[TABLE] MOV AL,ES:1000H MOV AL,ES:[1000H] 表示将字节数组的第一个数组元素送入AL寄存器中。 寄存器间接寻址方式通常将BX,BP称为基址寄存器SI,DI称为变址寄存器寻址时操作数的地址被放在这些寄存器中。 格式 操作码 [基址寄存器名或变址寄存器名] MOV AX,[BX] MOV AX,[SI] 也同意指定段超越前缀来取得其它段中的数据: MOV AX,ES:[BX] 寄存器相对寻址 操作数的偏移地址是指定寄存器的值与一个整数之和。 格式 操作码 变量名[机制寄存器名或变址寄存器名] 操作码 [变量名基址寄存器名或变址寄存器名] 操作码 符号名[机制寄存器名或变址寄存器名] 操作码 [符号名基址寄存器名或变址寄存器名] 操作码 机制寄存器名或变址寄存器名/-数字表达式 如 MOV SI,5 MOV AL,TABLE[SI] MOV AL,[TABLESI] 基址变址寻址方式操作数的偏移地址是两个指定寄存器的值之和。 格式 操作码 [基址寄存器名][变址寄存器名] 操作码 [基址寄存器名变址寄存器名] 如 MOV AX,[BX][SI] MOV AX,[BXSI] 当机器运行含有这样的寻址方式的指令时根据地址码字段的值得到基址寄存器和变址寄存器的值将其相加。和作为操作数的偏移地址。 能够用段超越前缀又一次指定段寄存器 MOV AL,ES:[BX][SI] 相对基址变址寻址操作数偏移地址是指定寄存器的值与相对偏移量之和。 MOV AL,TABLE[BX][SI] MOV AL,TABLE[BXSI] MOV AL,[TABLEBXSI] 格式 操作码 变量名[基址寄存器名][变址寄存器名] 操作码 变量名[基址寄存器名变址寄存器名] 操作码 [变量名基址寄存器名变址寄存器名] 符号名 变量名[基址寄存器名][变址寄存器名] 符号名 变量名[基址寄存器名变址寄存器名] 符号名 [变量名基址寄存器名变址寄存器名] 操作码 [基址寄存器名变址寄存器名/-数字表达式] 四类传送指令通用传送指令、累加器专用传送指令、地址传送指令、标志传送指令 DST:目的操作数 SRC:源操作数 REG:寄存器 SEGREG:段寄存器 MEM:存储器 DATA:马上数 PUSHF:标志入栈指令 POPF:标志出栈指令 XCHG交换指令 MOV:可实现寄存器之间、寄存器和存储器之间传送数据还可实现马上数送寄存器或存储单元的操作。 MOV:原操作数与目的操作数不能同一时候为存储器寻址方式即两个内存单元之间不能直接传送指令。 MOV:两个段寄存器之间不同意直接传送数据。 把CPU内部的寄存器细分为段寄存器和寄存器。MOV有9种指令。 MOV的9种传送方式 从寄存器到寄存器 MOV REG1REG2 如 MOV AX,BX MOV AH,CL MOV BX,SI MOV DI,DX 从寄存器到段寄存器 MOV SEGREG1REG 如 MOV DS,AX MOV ES,DX MOV SS,DI 从寄存器到存储器 MOV MEM,REG MEN指下面五种存储器寻址方式直接、寄存器间接、寄存器相对、基址变址、相对基址变址。 如 TABLE是定义的字变量 MOV TABLE,AX MOV [BX],BX MOV TABLE[BX],CX MOV [BX][SI],DX MOV TABLE[BX][SI],AX 从段寄存器到寄存器 MOV REG,SEGREG 格式 MOV AX,CS MOV BX,ES MOV DI,SS MOV SI,DS 从存储器到寄存器 MOV REG,MEM 格式 MOV AX,TABLE MOV BX,[BX] MOV CX,TABLE[BX] MOV DX,[BX][SI] MOV AX,TABLE[BX][SI] 从段寄存器到存储器 MOV MEM,SEGREG 格式 MOV TABLE,CS MOV [BX],ES MOV TABLE[DI],SS MOV [BX][SI],DS MOV TABLE[BX][SI],ES 从存储器到段寄存器 MOV SEGREG,MEM 格式 MOV ES,[BX] MOV SS,TABLE[DI] MOV DS,[BX][SI] 从马上数到寄存器 MOV REG,DATA 格式 MOV AX,OOH MOV BX,12H MOV CX,34H MOV SI,56H 从马上数到存储器 MOV MEM,DATA 格式 MOV TABLE,DATA MOV WORD RTR[BX],0FFSET TABLE MOV TABLE[DI],ABC MOV [BX][SI],ABC2 MOV TABLE[BP][SI],0FFH ABC是符号名相当于一个常数TABLE是变量名。 PUSH指令 格式 PUSH SRC 将16位寄存器、段寄存器、16位存储单元数据压入堆栈。 POP指令 格式 POP DST 将堆栈中的16位数据送入16位寄存器、段寄存器、16位存储单元中。 堆栈中数据的压入弹出必须以字为单位进行。 PUSHF指令 格式 PUSHF 将标志寄存器内容压入堆栈 POPF 格式 POPF 将16位堆栈数据弹入标志寄存器中。 XCHG指令 XCHG指令可实现字互换和字节互换。 互换能够在寄存器之间进行。也能够在寄存器和存储单元之间进行。 格式 XCHG DST,SRC 互换源、目的两个操作数的存放位置。 XCHG指令源、目的操作数的寻址方式不同意是马上寻址方式两个存储单元之间不能直接互换数据。 地址传送指令将地址送到指定的寄存器中 LEA:偏移地址送寄存器 LDS:指针送指定寄存器和DS LES:指针送指定寄存器和ES 格式LEA REG,SRC 操作REGSRC的偏移地址 功能把源操作数的偏移地址送到指定的寄存器 LDS:指针送指定寄存器和DS寄存器 格式LDS REG,SRC 操作REG(SRC) (DS)(SRC2) 功能将源操作数寻址到的存储单元的第一个源操作数字送16位寄存器第二个源操作数字送DS寄存器。 LES:指针送指定寄存器和ES寄存器指令 格式LES REG,SEC 操作REG(SRC) (ES)(SRC2) 功能将源操作数寻址到的存储单元的第一个源操作数字送16位寄存器第二个源操作数字送ES寄存器。 LEA BX,TABLE TABLE是数据段中定义的地址标号。指令运行前假设(BX)0000H,(DS)2000H,TABLE20020H,运行后BX0020H 加法指令ADD 格式ADD DST,SRC 操作DST(SRC)(DST) 功能完毕源操作数和目的操作数的加法运算并把运算结果保存在目的操作数中。 带进位加法指令ADC 格式ADC DST,SRC 操作DST(SRC)(DST)CF 功能完毕带进位的源操作数和目的操作数的加法运算并把结果保存在目的操作数中。 增量指令 INC 格式INC DST 操作DST(DST)1 功能完毕目的操作数的自加运算 ADD和ADC指令两个操作数不能同一时候为存储器寻址方式而且目的操作数不能为马上数寻址方式。 INC指令的操作数不能为马上数寻址方式。 完毕双字长相加被加数存放在DX和AX中加数放在BX和CX中和放在DX和AX中。 ADD AX,CX ADC DX,BX SUB减法指令 格式SUB DST,SRC 操作DST(DST)-(SRC) 功能完毕源操作数和目的操作数的减法运算把结果保存在目的操作数中。 SBB 带借位减法指令 格式SBB DST,SRC 操作DST(DST)-(SRC)-CF 功能完毕带借位的源操作数和目的操作数的减法运算并把运算结果保存在目的操作数中。 DEC 减量指令 格式DEC DST 操作DST(DST)-1 功能完毕目的操作数的自减运算。 NEG 求补指令 格式NEG DST 操作DST0-(DST) 0-操作数-操作数 CF表示机器的最高有效位向更高有效位的进位。 减数被减数此时有借位。则CF1否则CF0. 完毕双字长相减操作被减数存放在DX和AX中减数存放在BX与CX中。差放在DX和AX中, SUB AX,CX SBB DX,BX 乘法指令 乘法指令可对字节、字、双字进行操作。且可对有符号数整数或无符号整数进行操作。 两个8位数相乘结果为16位数。 两个16位数相乘。结果为32位数。 无符号数指令MUL 格式MUL SRC 操作 字节操作(AX)(AL)*SRC 字操作(DX-AX)(AX)*SRC 有符号数乘法指令IMUL 格式IMUL SRC 在乘法指令中。被乘数也即目的操作数隐含在AX字运算或AL字节运算中乘数也即源操作数。 两个8位数相乘是16位存放在AX中。 两个16位数相乘是32位。存放在DXAX中。 当中DX存放高位字。AX存放低位字。 MUL CL 。AL的内容乘以CL的内容无符号数存于AX。 IMUL DL 。AL的内容乘以DL的内容有符号数存于AX。 MUL BYTE PTR[BX] AL内容乘以数据段中由BX寻址的字节存储单元的内容无符号积存于AX。 120. IMUL WORD PTR[BP] 。AX内容乘以堆栈段中由BP寻址的字存储单元的内容带符号的积存于DXAX。 121. 逻辑运算指令可对8位数或16位数进行逻辑运算。是按位操作的。 122.AND逻辑与指令 格式AND DST,SRC 操作(DST)(DST)(SRC) 本指令的功能用于使某个操作数中的若干位维持不变而使另外若干位位0的操作。也称屏蔽某些位。 要维持不变的位必须和1相与而要置零的位必须和0相与。 123屏蔽AL中的高四位 AND AL,00001111B 124.AND AL,AL 指令运行前后。AL无变化。但运行后使标志位发生了变化即CF0OF0. 125.OR逻辑或指令 格式OR DST,SRC 操作(DST)(DST)(SRC) 本指令用于使某个操作数中的若干位维持不变使另外若干位置1的场合。要维持不变的必须和0相或而置为1的位必须和1相或。 126.OR AL,10000000B 若运行前(AL)OFH,则运行后(AL)8FH. 127.OR AL,AL 指令运行前后AL不变但运行后标志位发生了变化即CF0。OF0. 128.XOR 逻辑异或指令 格式XOR DST,SRC 操作(DST)(DST)异或(SRC) 用于推断两个数是否相等也可用于操作数中的若干位维持不变而使另外若干位取反的操作。维持不变的位与0相异或取反的位与1相异或。 129.XOR AL,AL 运行后使(AL)0CF0。OF0. 130.測试AL是否等于33H XOR AL,33H JZ MATCH 131.使AL中最高位和最低位取反。其它位保持不变 XOR AL,10000001B 132.TEST測试指令 格式TEST DST,SRC 操作(DST) (SRC) 用于不改变原有操作数的情况下用来检測某一位或某几位的条件是否满足。用于条件转移指令的先行指令。 不检測的那些位与0相与即屏蔽掉。 检測的那些位与1相与即保持不变。 133.检測AL的最高位是否为1若为1则转移否则顺序运行。 TEST AL,10000000B JNZ AA ….. AA:… 134.NOT逻辑非指令 格式NOT DST 寻址方式不同意为马上寻址方式及段寄存器。 135.指令寻址方式是确定下一条要运行指令的地址的方法。 136.段内直接寻址 这样的寻址方式的汇编格式有三种 指令名 SHORT 转移目标地址标号 指令名 转移目标地址标号 指令名 NEAR PTR 转移目标地址标号 指令中直接指明了要转移的目标地址。因此叫直接寻址。又由于这样的指令仅仅改变了IP寄存器的值而不改变CS寄存器的值因此又叫段内寻址。 当运行这样的寻址方式的转移指令时。机器取出位移量与当前IP相加。和送入IP寄存器中。CS寄存器内容保持不变从而实现转移。 位移量不同转移范围不同。当位移量位8位仅仅同意转移到与本条指令的下一条指令相距-128~127范围内的存储单元中。当位移量位16位时。同意转移到当前代码段内不论什么地方。 137.位移量能够是一个带符号的8位数也能够是一个带符号的16位数。表示了转移地址偏移本条指令的下一条指令的字节数。负数表明要向当前指令的后面跳转。整数要向当前指令的前面跳转。 138.条件转移指令的位移量仅仅能是8位。而无条件转移指令能够是8位或16位。 139.转移指令是一种基本的程序控制指令。当中无条件转移指令使汇编者能跳过程序某些部分转移到不论什么分支中去。 140.条件转移指令可使编程者依据结果来决定转到何处。測试的结果保存在标志位中然后又被条件转移指令检測。 141.比較两个数。若两数相等则转移。否则顺序运行 CMP AX,BX JZ SS2 … SS1… SS2… 142.两个无符号数比較大小时机器依据CF标志位来推断大小。即两无符号数相减。若不够减则最高位有借位CF1否则CF0。 当CF1时说明被减数低于减数。 当CF0且ZF0时说明被减数高于减数 当CF0且ZF1时。说明被减数等于减数。 143.变量TABLE中存放了一个偏移地址当无符号数X小于、等于或大于此偏移地址时。应去运行三个不同的程序段。 MOV BX,TABLE MOV AX,X CMP AX,BX JA SS3 JZ SS2 … SS1… ;低于程序段 SS2… 等于程序段 SS3… 高于程序段 144.比較两个数相等则转移否则顺序运行 CMP AX,BX JZ SS2 … SS1:… SS2:… 145.中断Interrupt 146.NOP:无操作指令不运行不论什么操作 HLT:停机指令使CPU处于暂停状态。 147.段间直接寻址 1指令名 FAR PTR 转移地址标号 2指令名 段地址段内偏移地址 指令中直接指明了要转移的目标地址此转移地址或用地址标号或用数值地址表示因此叫直接寻址。 又由于这样的指令不仅改变IP寄存器的值并且改变CS寄存器的值因此又叫段间寻址。 148.段内间接寻址 1指令名 16位寄存器名 2指令名 WORD PTR 存储器寻址方式 转移的目标地址放在寄存器或存储器中。因此叫寄存器间接寻址。指令仅仅改变IP寄存器的值而不改变CS寄存器的值。因此又叫段内寻址。 149.段间间接寻址 指令名 DWORD PTR 存储器寻址方式 转移的目标地址放在存储器中。称作间接寻址。 又由于指令不仅改变IP寄存器的值并且改变CS寄存器的值因此又叫段间寻址。 150.控制转移指令通过改变CS。IP来控制程序的指令流程。 151.JMP段内直接寻址 1段内直接短转移 格式JMP SHORT 转移地址标号 操作IP(当前IP)8位偏移量 转移范围转到本条指令的下一条指令的-128~127个字节范围内。 段内直接近转移 格式1JMP NEAR PTR 转移地址标号 格式2JMP 数值偏移地址 可转移到当前代码段中不论什么地方。 152.JMP 段内间接转移 1格式JMP 16位寄存器名 功能无条件转移到当前段的指定偏移地址处 2格式JMP 存储器寻址方式 功能无条件转移到当前段的指定偏移地址处 153.段间直接转移 1格式JMP FAR PTR 转移地址标号 操作IP转移地址标号的偏移地址 CS转移地址标号的段地址 功能无条件转移到指定标号地址处往下运行。 2格式JMP 段地址值偏移地址 操作IP偏移地址值 CS段地址值 功能无条件转移到指定段的地址往下运行。 154.段间间接转移 格式JMP DWORD PTR 存储器寻址方式 操作IP寻址到存储单元的第一个字 CS寻址到存储单元的第二个字 功能无条件转移到指定段的指定偏移地址处。 155.全部JMP指令都不影响状态标志位。 156.CALL调用指令 1段内直接调用 格式CALL NEAR PTR 子程序名 CALL 子程序名 2段内间接调用 格式CALL 16位寄存器名 CALL WORD PTR 存储器寻址方式 3段间直接调用 格式CALL FAR PTR 子程序名 段间间接调用 格式CALL DWORD PTR 存储器寻址方式 157.RET返回指令 1段内返回 格式RET (2)段间返回 格式RET (3)段内带马上数返回 格式RET 表达式 4段间带马上数返回 格式RET 表达式 158.循环控制指令LOOP/LOOPZ/LOOPE/LOOPNZ/LOOPNE 格式 指令名 循环入口的地址标号 操作推断測试条件若条件成立则IP(IP)8;若条件不成立则IP保持不变。 循环指令用的是段内直接寻址法是相对转移指令。 159.从寄存器里取数据比从存储器里取数据快得多从而提高了指令运行速度。 160.如果TABLE是在数据段定义的一个字节数组的首地址标号其偏移地址为1000H则 MOV AL,TABLE MOV AL,[TABLE] MOV AL,[1000H] MOV AL,TABLE2 MOV AL,[TABLE2] MOV AL,[1000H2] 160.段超越前缀 如果TABLE是在附加数据段定义的一个字节数组的首地址标号其偏移地址为1000H。则 MOV AL,ES:TABLE MOV AL,ES:[TABLE] MOV AL,ES:1000H MOV AL,ES:[1000H] 161.BX,BP称为基址寄存器 SI,DI称为变址寄存器 MOV AX,[BX] MOV AX,[SI] MOV AX,[基址寄存器名或变址寄存器名] 162.注意寄存器间接寻址和相对寻址的差别 163.寄存器相对寻址操作数的偏移地址是指定寄存器的值与一个整数之和。 164.LEA 取偏移指令 ABC EQU 5 LEA SI,TABLE MOV AL,ABC[SI] 165[BX6] [BP-1000H] [SIOFFSET TABLE] 都是寄存器相对寻址。 166.基址变址寻址操作数的偏移地址是两个指定寄存器的值之和。 如 [基址寄存器名][变址寄存器名] [基址寄存器名变址寄存器名] 167.相对基址变址寻址 MOV AL,TABLE[BX][SI] MOV AL,TABLE[BXSI] MOV AL,[TABLEBXSI] 168.两个段寄存器之间不同意直接传送数据。 如 DATA是用户定义的一个数据段的段名 则 MOV AX,DATA MOV DS,AX 错误MOV DS,DATA 169.MOV AX,1234H PUSH AX 运行前 (SS)2000H,(SP)00FEH 运行后 (SS)2000H,(SP)00FCH 注意入栈时。SP-2 170.XCHG BX,[BPSI] 指令运行前 (BX)1234H,(BP)0100H,(SI)0020H,(SS)1F00H,(1F120H)0000H 则 源操作数物理地址1F00H*10H0100H0020H1F120H 运行后 (BX)0000H (1F120H)1234H 171.有两个5字节变量X(789623A789H),Y(2375937B60H),求ZXY 解 DATA SEGMENT X DB 89H,0A7H,23H,96H,78H Y DB 60H,7BH,93H,75H,23H Z DB 5 DUP(0) DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX MOV CX,5 MOV SI,0 PO: MOV AL,X[SI] ADC AL,Y[SI] MOV Z[SI],AL INC SI DEC CX JNZ PO MOV AH,4CH INT 21H CODE ENDS END START 172. DB :DEFINE BYTE 定义字节 一个字节长 DW:DEFINE WORD 定义字 两个字节长 DD:DEFINE DWORD 定义双字 四个字节长 173.AX123…100 CODE SEGMENT ASSUME CS:CODE START: MOV AX,0 MOV SI,1 MOV CX,100 PO: ADD AX,SI INC SI DEC CX JNZ PO CODE ENDS END START 174.X,Y串长度为N。XY显示Z,X!Y显示Y 解 DATA SEGMENT N EQU 20 X DB N DUP(0) Y DB N DUP(0) DATA ENDS CODE SEGMENT ASSUME DS:DATA,ES:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,N LEA SI,X LEA DI,Y CLD DF0 PO: MOV AL,[SI] CMP AL,[DI] JNZ NP INC SI INC DI DEC CX JNZ PO MOV DL,’Z’ MOV AH,02H INT 21H JMP DP NP: MOV DL,’Y’ MOV AH,02H INT 21H DP: MOV AH,4CH INT 21H CODE ENDS END START 175.完毕两个字节数据相加 解 DATA SEGMENT BUF1 DB 34H BUF2 DB 2AH SUM DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,BUF1 ADD AL,BUF2 MOV SUM,AL MOV AH,4CH INT 21H CODE ENDS END START 176.伪指令语句也叫指示性语句。仅仅是用来指示、引导汇编程序在汇编过程中做一些操作。为汇编程序在翻译时提供有关信息并不翻译机器代码的语句。 177.一条宏指令语句的功能相当于若干条指令语句的功能。 178. 。凝视 179.操作码用来指明操作的性质或功能。指令中的助记符都是操作码。MOV、ADD都是操作码。 180.CLC 操作数默认在CF中。 181.对于十六进制数当以A~F开头前面加数字0以避免和名字混淆如十六进制A6H。应该写成0A6H。否则easy和名字A6H混淆。 182.常数用符号名来取代就是符号常数。 用COUNT EQU 3或COUNT3定以后COUNT就是一个符号常数与数值常数3等价。 183.两个地址相加、相乘、相除是没有意义的。 184.MOV AL,4*85 。数值表达式 MOV SI,OFFSET BUF12 D地址表达式 185.逻辑运算符仅仅能用于数值表达式中不能用于地址表达式中。 186.关系运算符 EQ 相等 LT 小于 LE 小于等于 GT 大于 GE 大于等于 NE 不等于 运算结果为真时。表示为0FFFFH运算结果为假时为0000H MOV BX,32 EQ 45 等价于 MOV BX,0000H MOV BX,56 GT 30 等价于 MOV BX,0FFFFH 187.一条语句能够写在多行上续行符是 188.分离运算符 1LOW 运算符 格式LOW 表达式 功能取表达式的低字节部分 2HIGH运算符 格式HIGH 表达式 功能取表达式的高字节部分 188.CONSTANT EQU 256 DATA EQU HEIGHT12 HEIGHT是标号地址表达式赋以符号名DATA ALPHA EQU 7 BETA EQU ALPHA-2 ADDR EAU VARBETA B EQU [BP8] P8 EQU DS:[BP8] 189.EQU伪操作中的表达式是不同意反复定义的。而伪操作同意反复定义。 190.解除定义伪指令 PURGE Y1 EQU 7 PURGE Y1 Y1 EQU 88 191.DB 伪指令用来定义字节其后的每个操作数都占有一个字节8位的存储单元。 DW伪操作定义字其后的每一个操作数占有一个字16位。低位字节在第一个字节地址中高位字节在第二个字节地址中。 DD定义双字。 191.操作数“”能够保留存储空间。但不存入数据。待到程序执行时存放中间或终于结果。 192.汇编源程序定义 DATA_SEG1 SEGMENT 定义数据段 … DATA_SEG1 ENDS DATA_SEG2 SEGMENT 定义附加段 … DATA_SEG2 ENDS CODE_SEG SEGMRNT ASSUME CS:CODE_SEG,DS:DATA_SEG1,ES:DATA_SEG2 START: 開始运行的入口地址 MOV AX,DATA_SEG1 MOV DS,AX MOV AX,DATA_SEG2 MOV ES,AX CODE_SEG ENDS 。代码段定义结束 END START 。源程序结束 193.实现两个32位数的乘法程序 解 DATA SEGMENT NUM1 DD 12345678H NUM2 DD 5A4BEF06H RESULT DD 2 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV EAX,NUM1 MUL EAX,NUM2 MOV RESULT,EAX MOV RESULT4,EDX MOV AH,4CH INT 21H CODE ENDS END START 194将一个字节压缩BCD码转化成两个ASCII码 分析一个字节的压缩BCD码就是用一个字节的二进制数表示两位十进制数。如十进制96表示成压缩BCD码就是96H转化成ASCII码就是把压缩BCD码表示的十进制数的高位和低位分开并以ASCII码表示即装化成39H36H 解 DATA SEGMENT BCDBUF DB 96H ASCBUF DB 2 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,BCDBUF 取出BCD码 MOV BL,AL 送BL暂存 MOV CL,4 SHR AL,CL 。高四位变低四位高四位补零96H09H ADD AL,30H 。变成ASCII码39H MOV ASCBUF,AL 存储第一个ASCII码 AND BL,0FH 。屏蔽高四位仅仅保留低四位96H06H ADD BL,30H 变成BCD码36H MOV ASCBUF1BL 存储第二个码 MOV AH,4CH INT 21H CODE ENDS END START 195.利用直接查表法完毕将键盘输入的一位十进制数0~9转换成相应的平方值并存放在SQRBUF中。 分析0~9的平方值分别为0,1,4,9,16,25,36,49,64,81.把平方值放在一起形成一个平方值表依据输入的值和相应平方值所在单元地址之间的关系表首地址加上输入的值查出相应的平方值。 解 DATA SEGMENT SQRTAB DB 0,1,4,9,16,25,36,49,64,81 SQRBUF DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV BX,OFFSET SQRTAB 。平方表首地址 MOV AL,1 INT 21H 。由键盘输入一个数得到其ASCII码 SUB AL,30H 由ASCII码得到对应的数 XLAT 。查表 MOV SQRBUF,AL 存储结果 MOV AH,4CH INT 21H CODE ENDS END START 196.从键盘输入一个小写字母将其转化成大写字母在屏幕上显示出来。 分析用DOS功能调用来实现 ASCII-32 解 STACK SEGMENT STACK DB 200 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK BEGIN: MOV AH,01H 。一号调用从键盘输入字符存入AL INT 21H SUB AL,20H 十六进制20就是十进制的32 MOV DL,AL MOV AH,02H 。二号调用。在屏幕上显示DL中的内容 INT 21H MOV AH,4CH INT 21H CODE ENDS END BEGIN 197.在内存中有一个字节单元NUM存有带符号数据要求计算绝对值放入RESULT单元中。 分析NEG 求反 解 DATA SEGMENT X DB -25 RESULT DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AL,X TEST AL,80H 測试AL的正负 JZ NEXT 为正转NEXT NEG AL 否则求反 NEXT: MOV RESULT,AL MOV AH,4CH INT 21H CODE ENDS END START 198.多分支结构实现方法条件选择法跳跃表法地址表法 199.求Y1,X0 Y0,X0 Y-1,X0 输入数据为X。输出数据为Y都是字节变量。 解 DATA SEGMENT X DB -25 Y DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,X CMP AL,0 AL中内容和0比較 JGE BIG 0,转BIG MOV BL,-1 否则为负数-1送BL JMP EXIT 结束 BIG:JE EE AL中内容是否为0为零转EE MOV AL,1 否则为大于零1送BL JMP EXIT EE:MOV BL,0 EXIT: MOV Y,BL MOV AH,4CH INT 21H CODE ENDS END START 200.SHL将操作数逻辑左移指定次数 SHR将操作数逻辑右移指定次数 201.除法指令要求被除数的长度必须是除数的两倍。 字节除法是用16位数除以8位数字除法是用32位数除以16位数。 DIV无符号数除法 IDIV带符号数除法 202.格式DIV SRC 操作 字节操作 (AL)(AX)/(SRC)的商 (AH) (AX)/(SRC)的余数 字操作 (AX)(DX,AX)/(SRC)的商 (DX) (DX,AX)/(SRC)的余数 在除法中被除数也即目的操作数隐含在AX字节运算或DX-AX字运算中除数即源操作数。 203. 1DIV CL AX的内容除以CL的内容无符号商存于AL余数存于AH 2IDIV DL 3DIV BYTE PTR[BP] AX的内容除以堆栈段中由BP寻址的字节存储单元的内容。无符号的商存于AL中余数存储AH中。 204.CS 指令寻址 SS 堆栈寻址 DS 数据寻址 205.OF 是否溢出标识符 DF 方向标识符 IF 中断标志符 SF 符号标识符 ZF 是否为零标识符 AF 辅助进位标识符 PF 奇偶标识符 CF 进位标识符 206.AX,BX,CX,DX 16位数据寄存器。2字节 SP,BP,SI,DI 16位指针与变址寄存器 2字节 AX能够分别訪问高位字节AH和低位字节AL。 AX,BX,CX,DX能够以字16位形式訪问也能够以字节8位訪问。都是通用寄存器。 SP,BP,SI,DI仅仅能以字16位訪问。 207.使用ASSUME伪操作来明白段和段寄存器的关系。 当中段寄存器名必须是CS,DS,ES,SS,而段名必须是由SEGMENT定义的段中的段名。 208.ASSUME伪操作仅仅是指定某个段分配给哪一个段寄存器并不能把段地址装入段寄存器。 数据段和堆栈段须要这样做。CS不须要这样做这是在程序初始化时完毕的。 209.从CISC体系结构转变为RISC体系结构后。在相同的工艺水平即相同的主频相同的工艺尺寸相同的芯片面积下使CPU的速度和性能有了非常大的提高。 210.microprocessor 微处理器 Microcomputer 微型计算机 211.操作码指明要完毕操作的性质 地址码指明规定操作的数据存放地址或操作数 212.assemble language 汇编语言 汇编语言程序翻译成机器语言程序的过程称为汇编。 213.汇编语言依赖于某一详细计算机。是面向机器的语言。 214.八进制表示 O Q 十进制表示 D 二进制表示 B 十六进制表示 H 215反码的特点 1“0”有两种表示法 28位二进制反码所能表示的范围-128~127 3当一个带符号数由反码表示时最高位为符号位。当符号位为0时后面的7位为数值部分当符号位为1时。一定要按位取反。才干得到数值。 216.补码特点 1[0]补[-0]补00000000 28位二进制补码表示的数值为-128~127 3用补码表示的二进制数最高位为符号位当符号位为0时。其余7位是此数的二进制值。当符号位为1时数值获取方法是按位取反加1. 217.数字0~9的ASCII码值用十进制数表示是48~57 用十六进制表示是30H~39H 218.双字是不论什么字节地址開始的两个相邻字当中每一个字节都有自己的地址最小字节地址就是双字的地址。 219.非压缩BCD码是用一个字节仅仅表示一位0~9的十进制数。这些数作为无符号字节值存放。数的大小由低字节确定。 220.压缩BCD码是用一个字节来表示两个十进制数0~9。每半个字节保存一个0~9的数字。 221.结果的显示或打印。可使用DOS功能调用02号功能来实现。是把要显示字符的ASCII码送入DL寄存器功能调用02号送入AH寄存器通过指令INT 21H就可以实现结果的显示与打印。 222. MOV DL,’?’ MOV AH,02H INT 21H ‘?’原先放在何处并不重要。但一定是要送入DL寄存器才干显示。 223.显示字符串 将在缓冲区中的字符串送屏幕显示或打印。使用9号功能调用。要显示的字符串应该存入由数据段定义的缓冲区中。且以‘$’为结束标志。 解 DATA SEGMENT BUF DB ‘HOW ARE YOU!$’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MOV AX,DATA MOV DS,AX … MOV DX,OFFSET BUF MOV AX,09H INT 21H CODE ENDS 224. 225IP是指向下一次要取出的指令。与CS寄存器配合才干形成真正的物理地址。 226.通用寄存器共同拥有8个 EAX/EBX/ECX/EDX可作为8位16位或32位寄存器使用。 ESI/SDI/EBP/ESP可作为16位或32位寄存器使用。 227.AFAuxitiary Carry Flag 辅助进位标志 在字节操作时。由低半字节向高半字节进位或借位。在字操作时。低位字节向高位字节有进位或借位。则AF1。否则为0. 228.CFCarry Flag 进位标志 当结果的最高位产生一个进位或借位。则CF1否则CF0. 229.OF Overflow Flag 带符号数的运算结果超出了8位或16位即在字节运算时大于127或小于-128。在字运算时大于32767或小于-32768置1. 230.CF和OF没有必定关系。 231.奇偶标志PFParity Flag ,若操作结果中“1”的个数为偶数则PF1否则PF0. 可用于校验。 232.零标志 ZFZero Flag若运算结果为0则ZF1否则ZF0. 233.IF Interrupt-enable Flag 中断同意标志 若指令中置IF1。则同意CPU去接收外部的可屏蔽中断请求。若IF0则屏蔽上述的中断请求。 234.CLCClear Carry Flag 标志CF清零。即CF0 235.CLDClear Direction Flag 标志DF清零即DF0,则在串操作时。使地址增量。 236.方向标志 DFDirection Flag 若DF1。则引起串操作指令为自己主动减量指令也就是从高地址到低地址处理字符串。 若DF0则引起串操作指令为自己主动增量指令也就是从低地址到高地址处理字符串。 237.1个字节8位。1个字16位1个双字32位。 Word Double Word 238.字节是微型计算机中存取信息的基本单位存储单元。 一个双字占用4个存储单元字节。 239.对于字。双字四字数据类型。因为他们每一个数据都要占用多个单元訪问时仅仅需给出最低单元的地址号就可以然后依次存取后继字节。 低地址中存放低位字节数据高地址中存放高位字节数据。 240.在内存中 地址 0 1 2 3 4 5 数据12H 34H 45H 67H 89H 0AH 则 1字节34H 1字4534H 1双字89674534H 241.物理地址计算 10H*段基址偏移量 注10H16D 就是二进制数向左移动4位。 段基址和偏移量一般用十六进制数表示简便的计算方法是在段基址的最低位补以0H。再加上偏移量。 242.某内存单元的地址用十六进制数表示为1234:5678则物理地址是 10H*1234H5678H179B8H 注 1234:5678中1234是段基址5678是段内偏移量。就是偏移地址。 243.若(CS)1234H,(DS)2000H,(IP)0010H,(SS)4000H,则下一条要运行指令的地址是 10H*(CS)(IP)12340H0010H12350H 244.每一个存储单元在存储器中所具有的地址称为存储单元的物理地址。段基地址是每一段的起始地址单元与段基地址的距离称为段内偏移地址。也叫偏移量。 245. 1MOV AL,20H 2MOV BX.2568H 3MOV ECX 25685678H 三条指令中的马上数依次是8位16位32位相应的寄存器也各自是8位的AL。16位的BX和32位的ECX 246.MOV AX,im 马上数im低8位字节iml存储在低地址字节中。高8位字节imh存储在高地址字节单元中。 247.寄存器寻址操作数直接存放在寄存器中由指令指定的寄存器进行寻址即操作数包括在指令规定的8位。16位或32位寄存器中。 INC DL MOV DS,AX MOV EBX,ECX 三条指令操作数分别存于8位DL。16位AX和32位ECX中。 248.直接寻址 物理地址10H*DS有效地址 或 物理地址16D*DS有效地址 249.设操作数存放在DS所指向的数据段中DS2000H21000H34H。21001H12HBX5678H运行MOV BX,[1000H] 则 物理地址10H*DS1000H21000H BX1234H 低位字节在低地址存储单元中 高位字节在高地址存储单元中。 250默认情况下觉得操作数有效地址的作用域是DS所指向的数据段但同意使用段超越前缀指定为其它段即对于寻找操作数来说。还同意操作数在以代码段、堆栈段或附加段为基准的区域中仅仅要在指令中指明是段超越的。16位地址偏移量能够与CSSS。ES相加作为操作数的地址。如MOV AX,ES:[2000H] 251.寄存器间接寻址能够是16位或32位的 使用BX,SI,DI,BP则为16位寻址。 使用EAX,EBX,ECX,EDX,ESI,ESP,EDI,EBP,为32位寻址。 252.以BX/SI/DI/EAX/EBX/ECX/EDX/ESI/EDI间接寻址时。则默认操作数在DS段中。以BP/EBP/ESP间接寻址则默认操作数在SS段。 253.以SI/DI/BX间接寻址通常操作数在现行数据段中即数据段寄存器DS左移4位后加上SI/DI/BX中的16位偏移地址作为操作数的地址。 254.设(DS)2000H,(SI)1000H,21000H单元的内容为34H。21001H单元的内容为12H运行MOV AX,[SI]后(AX)1234H 254.若是以寄存器BP间接寻址则操作数在堆栈段中。SS左移4位后与BP相加作为操作数的地址。 如 (SS)3000H,(BP)2000H,32000H单元的内容为34H。32001H单元的内容为12H运行MOV AX,[BP]后。(AX)1234H. 255.通用寄存器EAX,EBX,ECX,EDX,ESI,EDI默认段寄存器为DS。 通用寄存器ESP,EBP默认段寄存器位SS。 256 1MOV EBX,[EAX] 默认DS为段基址传送双字给EBX 2MOV DX,[EBX] 默认DS为段基址传送字给DX 3MOV CH,[EAX] 默认DS为段基址传送字节给CH 257.假设操作数在默认段之外指令中必须加段超越前缀。 如 1MOV AX,ES:[SI] 。操作数在附加段寄存器ES中不在默认段DS中。 2MOV AX,DS:[BP] 操作数在数据段寄存器DS中不在默认段SS中。 “ES”和“DS”各自是两指令的段超越前缀。 258.若在指令中规定是段超越的则BP也能够与其它的段寄存器相加。形成操作数地址。如 MOV AX,DS:[BP] BP不是与SS段寄存器形成操作数地址而是与DS段寄存器形成操作数地址。 259.设(DS)2000H,(SI)1200H,(21200H)56H,运行指令MOV AH,[SI]的结果是 (AH)56H 260.设(DS)2000H,(DI)2100H,(22100H)68H,(22101H)41H,运行指令MOV BX,[DI]后。 (BX)4168H 261.EA Effective Address 有效地址 或偏移地址 偏移量 262.基址寻址由指定的基址寄存器内容加上指令中给定的偏移量要由一个段寄存器作为地址基准作为操作数的地址的寻址方式称为基址寻址。 263.在基址寻址方式下EA[基址寄存器]位移量位移量是常数且紧跟在操作码之后与操作码一起放在代码段中。 264.在16位寻址情况下。BX和BP作为基址寄存器。在缺省段超越前缀时。BX以DS作为默认段寄存器。BP以SS作为默认段寄存器。位移量为8位或16位。 265.基址寻址适用于对一维数组的数组元素进行检索操作。位移量表示数组起始地址偏移量基址表示能够变化的数组元素下标。 266.EA的格式 [基址寄存器]位移量 位移量[基址寄存器] 267. (1)MOV EAX,[BX24] 或 MOV EAX,24[BX] (2)MOV ECX,[EBP50] 或 MOV ECX,50[EBP] (3)MOV DX,[EAX1500] 或 MOV DX,1500[EAX] 268设(DS)2000H,(SI)1200H,(21206)56H,运行MOV AH,[SI6],结果为 (AH)56H 269基址变址寻址由指令中的基址寄存器内容和变址寄存器内容相加得到操作数的有效地址EA的寻址方式。 EA[基址寄存器][变址寄存器] 如 MOV AX,[BXSI] 或 MOV AX,[BX][SI] MOV EAX,[EDX][EBP] 或 MOV EAX,[EDXEBP] 一般规定由基址寄存器来决定默认哪一个段寄存器作段基址指针。若使用BP、ESP或EBP则默认操作数在SS中若使用其它基址或变址寄存器。则默认操作数在DS中。 270.MOV AX,[BX][SI] 基址寄存器是BX默认DS为段基址寄存器。 MOV EAX,[EBP][ECX] 基址寄存器是EBP默认SS为段基址寄存器。 271.设(DS)2000H,(SI)200H,(BX)1000H,(21200H)21H,运行MOV AL,[SIBX],结果: (AL)21H. 272.运行MOV BX,[EDIEAX]的结果是将内存中DS:[EDIEAX]处開始的连续两个单元内容送BX中。 273.相对基址变址寻址由变址寄存器、基址寄存器内容和位移量一同相加而得到操作数有效地址的寻址方式。 EA[基址寄存器][变址寄存器]位移量 如 MOV AX,[BXDIMASK] 或 MOV AX,MASK[BX][DI] ADD EDX,[ESI][EBP0FFFF000H] 或 ADD EDX,0FFFF000H[ESI][EBP] 274.汇编语言对指令的大写和小写是不敏感的。 275.传送100个数据写出程序。 分析使用循环。每次循环都要改动原地址和目标地址这就要把源、目的地址分别放在两个寄存器中。用寄存器间接寻址来寻找操作数改动了寄存器的内容。 解 MOV SI,OFFSET AREA1 MOV DI,OFFSET AREA2 MOV CX,100 AGAIN: MOV AL,[DI] MOV [SI],AL INC SI INC DI DEC CX JNZ AGAIN 276.OFFSET AREA1 是指地址单元AREA1在段内的地址偏移量。寻找内存操作数时必须以段地址在某个段寄存器中加上此单元的段内地址偏移量才干确定某一内存单元的物理地址。 277地址传送指令主要用于传送操作数的地址。 LEA,装入有效地址指令 Load Effective Address LDS:装入DS指令 LES:装入ES指令 LSS:装入SS指令 278.装入有效地址指令 LEA 格式LEA reg,mem 功能将有效地址偏移地址mem而不是mem的内容装入到一指定寄存器reg中。 说明源操作数必须是一个内存操作数。目的操作数必须是一个16位的通用寄存器。 279.LEA BXLIST 将变量LIST的地址偏移量送到BX 280.若BX寄存器的内容是0400HSI寄存器的内容是003CH运行指令LEA BX,[BXSI0F62H]后BX的内容是什么 解 将0400H003CH0F62H139EH送BX所以结果(BX)139EH. 与MOV BX,[BXSI0F62H]差别是MOV将139EH表示的单元内容送BX。 281.LEA指令能够用对应的源操作数为马上数的MOV指令取代。 如 MOV BX,OFFSET VARWORD 等价于 LEA BX,VARWORD 282LDS reg,mem LES reg,mem LSS reg,mem 功能将一个32位或48位的全地址指针包含一个16位段选择符和一个16位或32位偏移值装入一个段寄存器和一个通用寄存器。段寄存器由指令操作码LDS、LES、LSS分别指定为DS,ES,SS.通用寄存器由目的操作数reg指定。 283.XCHG reg,reg XCHG mem,reg XCHG reg,mem reg是寄存器操作数mem是存储器操作数。 如 XCHG AL,CL XCHG AX,DI XCHG BX,SI XCHG AX,BUFFER XCHG BX,DATA[SI] XCHG BL,[1000H] 284查表转换指令XLAT 格式XLAT 功能完毕一个字节的查表转换。在DSEBX外。建立一个256字节的表。用寄存器EBX作为基址。寄存器AL作为表的无符号下标即表指针将AL指向的那个字节的内容送回AL。即 ((EBX)(AL))AL 说明 1在使用该指令之前存储器内需有一个代码转换表。表首地址送到EBX相对于表首的位移量送到AL中则转换后数据的有效地址为 有效地址表首地址位移量 即以EBX寄存器内容作为表首AL寄存器内容作为位移量所相应的表中数据送入寄存器AL中并替换掉AL原先的内容。 2该指令无显式操作数操作数是隐含的。指令默认段的数据段DS而偏移量总是从寄存器EBX中得到。 3指令运行前AL是下标。运行后AL是查表的结果。若要在其它段中查表可加段前缀。 285.通过查表转换指令求0~9中随意一个数的平方 TAB DB 14。916。2536。4964。81 MOV AX,SEG TAB MOV DS,AX MOV BX,OFFSET TAB MOV AL,5 XLAT 运行后AL25 286.实现存储器操作数与马上数相加/减与累加器或别的寄存器相加/减。和/差放到该存储单元中。 ADD BETA[SI],100 ADD BETA[SI],AX ADD BETA[SI],DX SUB BUF[SI],200 SUB BUF[SI],AX SUB BUF[SI],DX 287指令SBB [DI],100 实现的功能是用DS:[DI]所指单元的内容减去100再减去CF结果送到DS:[DI]指向的字节单元中。 288.求补指令 NEG 格式NEG OPRD 功能对OPRD取补相当于运行“OPRD0-OPRD” 如 若(AH)13H,运行NEG AH指令后。(AH)0EDH;若(BX)03H,运行NEG BX指令后(BX)0FFFDH. 说明是求补而不是求反。 289.CMP AX,BX 依据CMP指令的功能应做AX-BX的操作。若结果没有产生借位(CF0),则AXBX;若产生借位(CF1),则AXBX. 290.求最大值 MOV BX,OFFSET BLOCK MOV AX,[BX] INC BX INC BX MOV CX,99 AGAIN: CMP AX,[BX] JG NEXT MOV AX,[BX] NEXT: INC BX INC BX DEC CX JNE AGAIN MOV MAX,AX HLT 说明JG为推断带符号数的大小。若大则转移到后面的标号。 291.MUL OPRD IMUL OPRD IMUL OPRD1OPRD2 IMUL OPRD1OPRD2OPRD3 MUL:实现两个无符号数相乘AL。AX或EAX的内容和OPRD的内容是两个无符号数且假设OPRD长度为8位。则与AL内容相乘。相乘结果送到AX中。 假设OPRD长度为16位则与AX内容相乘相乘结果送到DX:AX中 假设OPRD长度为32位则与EAX内容相乘相乘结果送到EDS:EAX中 292.MUL CL AX(AL)*(CL) MUL BX 。DX:AX(AX)*(BX) MUL DWORD[ESI] 。EAX中32位数与[ESI]所指双字单元中的32位数相乘结果在EDXEAX中。 293.IMUL OPRD 被乘数是累加器AL,AX或EAX乘以指定的操作数。字节运算时乘积返回到AX字运算时乘积返回到DX:AX,双字运算时乘积返回到EDX:EAX 294IMUL OPRD1OPRD2 在双字操作数格式下用OPRD1乘以OPRD2。积存放在OPRD1指定的寄存器中。 295.IMUL OPRD1。OPRD2OPRD3 用OPRD2乘以OPRD3积放到OPRD1 296格式 DIV OPRD IDIV OPRD 功能 DIV无符号数除法OPRD内容作为除数假设OPRD长度为8位则AX内容作为被除数运算后商送到AL中余数送到AH中。 297.DIV CL (AX)/(CX) ,商在AL中余数在AH中。 298.DIV WORD PTR[SI] (DX:AX)中的32位数除以SI所指单元中的16位数商在AX中。余数在DX中。 299.某个操作数自己和自己相“与”操作数不变能够使CF0. 某个操作数。自己和自己相“或”操作数不变。能够使CF0. 某个操作数自己和自己相“异或”操作数置零。使CF0. 300.检測AL中的最低位是否为1为1则转移。 TEST AL,01H JNZ THERE … THERE: 301.在实地址方式下段寄存器的内容左移4位而得到段基地址。 302.NAME MAIN_PROGMODULE NAME是保留字用于定义程序模块的名称MAIN_PROGMODULE是程序名称可用随意标识符为程序命名。 303.显示一行字符串 NAME SIMPLE_EXAMPLE FIRST_DATA SEGMENT STRING_DA DB ‘This is my program$’ FIRST_DATA ENDS FIRST_STACK SEGMENT PARA STACK ‘STACK’ DB 100 DUP(?) FIRST_STACK ENDS FIRST CODE SEGMENT ASSUME DS:FIRST_DATA,SS:FIRST_STACK,CS:FIRST_CODE START: MOV AX,FIRST_DATA MOV DS,AX LEA DX,STRING_DA MOV AH,09H INT 21H MOV AH,4CH INT 21H FIRST_CODE ENDS END START 304.依据程序的实际情况SS,DS,ES也能够没有仅仅有CS是不可缺少的。每一个程序至少必须有一个。 305.每一个源程序在其代码段中都必须有返回到DOS的指令语句。以保证程序运行完后能自己主动返回DOS可继续向计算机键入命令。 306.作为存储器操作数的标号和变量有三种共同属性 1段值段基址可用SEG运算符求得。 2偏移值段内偏移地址。可用OFFSET运算符求得。 3类型。。。 307.“”表示不确定值。仅仅表示预留规定长度的存储空间。 308.DUP建立单个值的多次拷贝。 309. 1VAR1 DB ? ;变量VAR1分配一个字节但不赋初值。 2VAR2 DD ? ; 变量VAR1分配四个字节但不赋初值。 3STR1 DB ‘ABCDE’ ;给字符串分配5个字节并赋初值。 4ARRAY DW 20 DUP(1) ;给数组ARRAY分配20个字初值均为1 5BUFF DB 6 DUP(?) ;相当于 DB ?,?,?,?,?,? 6COUNT DB 25,35,45 ;给变量COUNT分配3个字节并赋初值 310.操作数是字符串时内存中存放的是每一个字符的ASCII码 STR1 DB ‘ABCDE’ STR1 DB ‘A’,’B’,’C’,’D’,’E’ STR1 DB 41H,42H,43H,44H,45H 三者等价。 311.复制操作符DUP表示操作数反复若干次。 1BUFFER1 DB 2 DUP(234) 等价于 BUFFER1 DB 23。423。4 BUFFER2 DW 1。23 DUP(6) 等价于 BUFFER2 DW 126。66 BUFFER3 DB 2 DUP(5。6。3 DUP(7)) 等价于 BUFFER3 DB 5677。7。56。7。77 312.指令单元 NEAR 和FAR 若一个单元的类型是NEAR汇编程序产生一个段内JMP或CALL指令 若一个单元的类型是FAR汇编程序产生一个段间JMP或CALL指令 313.DATA EQU 7 PURGE DATA DATA EQU 28 314.MOV AX,SEG DATA 功能把DATA的段地址存入AX寄存器中。 315.MOV SI,OFFSET DATA 功能把DATA的偏移地址存入SI寄存器中。 等价于 LEA SI,DATA 316.PTR操作符 格式:类型 PTR 表达式 类型BYTE,WORD,DWORD,NEAR,FAR 功能给表达式变量或标号指定类型无论有无类型或是什么类型均以PTR前的类型为准。有没有像C语言中的强制类型转换呢。嘿嘿 对于变量。能够指定的类型是BYTE,WORD,DWORD 对于标号能够指定的类型是NEAR(段内引用型)FAR段间引用型。 317.MASM:Microsoft Macro Assembler 汇编器。汇编开发环境 318.ASSUME段寄存器说明语句 格式ASSUME 段寄存器段名/组名 功能说明源程序中定义的段或组由哪个段寄存器去寻址。指出了段与段寄存器的关系。 319.三个数相加把结果放在SUM单元中。 解 DATA SEGMENT BUF DB 35H,78H,0A5H SUM DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,0 MOV SI,OFFSET BUF ADD AL,[SI] INC SI ADD AL,[SI] INC SI ADD AL,[SI] MOV SUM,AL MOV AH,4CH INT 21H CODE ENDS END START 320.子程序定义 子程序名 PROC FAR /NEAR … RET 子程序名 ENDP 321.调用 CALL [NEAR/FAR PTR] 子程序名 322.宏定义 宏名 MACRO 形參 … 宏名 ENDM 调用 宏名 实參 323.宏调用展开在编译处。在EXE文件里有N份。 子程序展开在运行处在EXE文件里有1份。 324.同一个变量能够在两行定义 如 X DB 12H,34H DB 78H,96H 325. 错误 INC [SI] 正确 INC WORD PTR [SI] INC BYTE PTR [SI] 326.在汇编中字符就和字符串一样。是同一个概念都用单引號。字符就是长度为1的字符串。 327.AND AL,78H AND 0FH 第一个AND是指令在运行时起作用。 第二个AND是运算符。在编译时起作用。 328.ADD AX,53 第一个ADD是指令。在运行时处理。 第二个“”是一个表达式编译时处理。 329.MOV AX,WORD PTR X X是其它类型的AX是WORD类型的。用WORD PTR进行类型转换。 330.DB能够定义 1单字节数据 2字符串按顺序放 下面是内存单元 MESSAGE DB ‘HELLO’ 331.DW能够定义 1双字节数据 2仅仅能为长度为2的字符串 3地址表达式 EA 下面是内存单元 332.DD能够定义 1双字数据 2仅仅能放长度为4的字符串 3地址表达式 下面是内存单元 333.子程序结束 ENDP 源程序结束 END 334.$表示当前地址 335汇编上机过程 1用编辑程序建立ASM源文件 2用MASM程序把ASM文件汇编成OBJ文件 3用LINK程序把OBJ文件连接成EXE文件 4用DOS命令直接键入文件名称就可运行该程序 336汇编程序的主要功能 1检查源程序语法是否正确 2測出源程序中的语法错误并给出错误信息 3产生目标程序 4展开宏指令 337.OBJ是二进制文件。 338.汇编过程生成3个文件 EXAM.OBJ :一定须要 EXAM.LST 可有可无 EXAM.CRF 可有可无 339.警告错误WARNING ERRORS 严重错误 SEVERE ERRORS 340.ASM (MASM汇编).OBJ(LINK 连接).EXE 341.DEBUG命令 A命令汇编命令逐行输入汇编程序 —A 回车 2A7D : 0100 MOV AX,0201 ;地址自己主动给出 2A7D : 0103 MOV BX,0200 2A7D : 0106 MOV CX,0001 2A7D : 0109 MOV DX,0000 2A7D : 010C INT 13 2A7D : 010E INT 3 2A7D : 010F ;结束输入 段地址偏移地址 自己主动给出 342.G命令 运行 —G100 回车 从地址100H处開始运行 343.T命令 跟踪运行 每条指令运行后都要暂停并显示各寄存器的内容。实际上是单步运行。 —T0100 3 从地址0100H開始运行运行3条命令 344.U命令 反汇编 —U 100 回车 。从地址100H处開始反汇编 能够看到源码的段地址和偏移地址。 345.D命令 显示内存 将调入内存的程序以十六进制形式以及相应的ASCII形式显示出来。 —D 100,200 回车 显示内存地址从100至200这一段的内容。 346.地址计数器 $ JNZ $6 ;JNZ指令的首地址加上6 当$用在指令中。表示本条指令的第一个字节的地址。$6必须是还有一条指令的首地址。 $用在伪操作的參数字段时表示的是地址计数器的当前值。 347.ORG伪操作用来设置当前地址计数器的值。 格式 ORG 常数表达式 如常数表达式的值为N。则ORG伪操作能够使下一个字节的地址成为常数表达式的值N。 VECTORS SEGMENT ORG 10 VECT1 DW 47A5H ORG 20 VECT DW 0C596H VECTORS ENDS 348ORG $8 ;表示跳过8个字节的存储区亦即建立起8字节的未初始化的数据缓冲区。 349.TYPE运算符返回变量或标号的类型值属性值 350.LENGTH运算符返回变量数据区分配的数据项总数 351.SIZE运算符返回变量数据区分配的字节个数 352. 8086CPU在基址变址寻址方式中基址寄存器能够是B A.AX或CX B.BX或BP C.SI或BX D.DX或DI 353下列传送指令中有语法错误的是A A.MOV CS,AX B.MOV DS,AX C.MOV SS,AX D.MOV ES,AX 解不同意给CS/IP/PSW三个寄存器传送数据即这三个寄存器的值用户无法改变。 354.逻辑移位指令SHR用于D A.带符号数乘2 B.带符号数除2 C.无符号数乘2 D.无符号数除2 355.逻辑移位指令 1SHL 2SHR 都用于无符号数 356.算数移位指令 1SAL 2SAR 用于有符号数 357. STR1 DW ‘AB’ STR2 DB 14 DUP(?) CNT EQU $-STR1 MOV CX,CNT MOV AX,STR1 则寄存器CL的值是A A.10H B.12H C.0EH D.0FH J寄存器AX的值是C A.00ABH B.00BAH C.4142H D.4241H 358.简述汇编语言的上机过程 1用编辑软件编辑扩展名为.ASM的源程序。 2用汇编程序MASM汇编源程序产生目标文件.OBJ; 3用连接程序LINK连接目标程序产生可运行文件 .EXE。 4用DOS直接键入文件名称执行可执行程序或进入DEBUG调试 259.运行段内返回RET指令时运行的操作是 IP((SP)1。(SP)) SP(SP)2 260运行段间返回RET指令时运行的操作是 IP((SP)1(SP)) SP(SP)2 CS((SP)1(SP)) SP(SP)2 261.其中断发生时。由中断机构自己主动完毕哪些动作中断过程 1取中断类型号标志寄存器内容入栈。 2当前代码段寄存器入栈当前指令计数器入栈。 3禁止硬件中断和单步中断从中断向量表取4N的字内容送IP及4N2的字内容送CS转中断处理程序 262. DATA SEGMENT ORG 0020H BUFF DB 6。5’78’ ARRAY DW 5678 BASUB EQU ARRAY-BUFF DATA ENDS 该数据段已占有的存储字节数是10字节 BASUB的值4 263. A1 DB 10 DUP(?) A2 DB 01。23。45。678。9 … MOV CX,LENGTH A1 MOV SI,SIZE A1-TYPE A1 LOP:MOV AL,A2[SI] MOV A1[SI],AL SUB SI,TYPE A1 DEC CX JNZ LOP 运行后A1单元開始的10个字节的内容0,1,2,3,4,5,6,7,8,9 功能将A2中的10个数据传送到A1中的10个字节单元。 264.当运行指令ADD AX,BX 后若AX的内容为2BA0H设置的奇偶标志位PF1则正确的是D ???不懂 A.表示结果中含1的个数为偶数 B.表示结果中含1的个数为奇数 C.表示该数为偶数 D.表示结果中低8位含1的个数为偶数 265.串反复前缀指令 REP CX0则退出本条指令的运行否则继续运行。 REPZ/REPE: 当CX0即数据串比較完毕或ZF0即某次比較结果不相等时退出。 266.在串操作指令前使用反复前缀指令REPE终止串的反复操作条件是C A.CX0且ZF0 B.CX0且ZF1 C.CX0或ZF0 D.CX0或ZF1 267.以下指令中合理而有意义的指令是D A.REP LODSB B.REP SCASB C.REP CMPSB D.REP MOVSB MOVS是串传送指令MOVSB传送一个字节 268.以下的数据传送指令中。错误的操作是D A.MOV SS:[BXDI],1000H B.MOV DX,1000H C.MOV WORD PTR[BX],1000H D.MOV DS,2000H 马上数不能直接送段寄存器即段寄存器仅仅能通过寄存器或存储单元传送数据。 269.运行下列指令后正确的结果是B MOV AL,100 MOV BL,-2 A.AL100H,BL02H B.AL64H,BL0FEH C.AL64H,BL82H D.AL100H,BL0FEH 270. 依据某一个标志位的值来决定是否转移。測试的标志位有S/Z/C/P/O五个。适用于測试某一次运算的结果并依据不同的结果做不同的处理。 1JZ 条件ZF1时转移。结果为零则转移。 2JNZ 。条件ZF0时转移。结果不为零则转移。 3JS 条件SF1时转移。结果为负则转移。 4JNS 条件SF0时转移。结果为正则转移。 5JO 条件OF1时转移。结果为溢出则转移。 6JNO 。条件OF0时转移。结果无溢出则转移。 7JP 。条件PF1时转移。奇偶位为1则转移。 8JNP 条件PF0时转移。奇偶位为0则转移。 9JC 。条件CF1时转移。有进位则转移。 10JNC 条件CF0时转移。无进位则转移。 JZ 同JE JNZ 同JNE JMP是无条件转移。 271.測试BL寄存器内容是否与4FH相等。若相等则转NEXT处运行。代码为B A.TEST BL,4FH JZ NEXT B.XOR BL,4FH JZ NEXT C.AND BL,4FH JZ NEXT D.OR BL,4FH JZ NEXT 272. D1 DB 20H DUP(?) D2 DW D1 用一条指令实现取D1的偏移地址放到SI 3种方法 MOV SI,OFFSET D1 LEA SI,D1 MOV SI,D2 273.PSW寄存器共同拥有6位条件状态位3位控制状态位。 274.ADD/ADC/INC除INC不会影响CF外。其它都会影响CF/ZF/SF/OF 275.SHL/SHR/SAL/SAR 对标志位的影响是一样的。 276.注意NEG是求补而不是求反。 277.假定DX10111001B。CL3。CF1。试确定下列各条指令单独运行后DX中的值。 1SHR DX,1 2RCR DL,1 3RCL DX,CL 解 DX:0000 0000 1011 1001 移动后 DX:0000 0000 0101 1100 所以 (DX)005CH RCR带进位循环右移指令 操作操作数循环右移指定次数 RCL带进位循环左移指令 操作操作数循环左移指定次数 DX:0000 0000 1011 1001 移动后 DX:0000 0000 1101 1100 所以 (DX)00DCH 运行后 DX:0000 0101 1100 1000 所以 (DX)05C8H 278. MOV AL,25H SHL AL,1 MOV BL,15H MUL BL 运行后AX的内容为 解 25H*2*15H1554D 全都化成十进制计算。 279.程序 DATA SEGMENT ORG 0020H DA1 DW 12H,23H DA2 DB 11H,21H DA3 EQU 1234H DA4 EQU $-DA2 DA5 DB 31H,32H DATA ENDS 该程序段已占有的存储字节数是多少 DA4的值 DA5的值 解 18 22 0026H 注意EQU定义的符号名不占存储空间。 280. ORG 1221H NUM DW 12H … MOV CH,TYPE NUM MOV AX,NUM MOV BX,OFFSET NUM MOV CL,BYTE PTR NUM1 HLT 所以 (AX)0012H,(BX)1221H,(CX)0200H ORG是设置该程序段的偏移地址。 281.程序 ADRR DB XXH,XXH,…,XXH NUM EQU $-ADRR RETT DB ? … MOV CX,NUM MOV BX,-1 DON:INC BX CMP ADRR[BX],0 LOOPZ DON JNZ NEXT MOV BL,0FFH NEXT:MOV RETT,BL HLT 功能 RETT的内容是什么 解 在以ADRR为起始地址的数组中查找第一个非零数据。 若找到则将第一个非零数据在数组中的偏移量送入RETT单元中。若无非零数据。则将0FFH送入RETT单元中。 282.循环控制指令測试条件 283.循环控制指令LOOPNZ/LOOPNE控制循环继续运行的条件是B A.CX≠0且ZF1 B.CX≠0且ZF0 C.CX≠0或ZF1 D.CX≠0或ZF0 284压缩BCD码指每一个字节存储两个BCD码 非压缩BCD码指每一个字节存储一个BCD码当中低4位存储数字的BCD码高4位为0. 285.使计算机运行某种操作的命令是B A.伪指令 B.指令 C.标号 D.助记符 286.将数据5618H存放在存储单元中的伪指令是B A.DATA1 DW 1856H B.DATA1 DB 18H,56H C.DATA1 EQU 5618H D.DATA1 DB 18H,00H,56H,00H 287.设DS2200H,BX1000H,SI0100H,偏移量D0A2B1H,计算出下列各种寻址方式的有效地址 1使用D的直接寻址0A2B1H 2使用BX的寄存器间接寻址1000H 3使用BX和D的寄存器相对寻址0B2B1H 4使用BX、SI和D的相对基址变址寻址0B3B1H 5使用BX、SI的基址变址寻址1100H 288.如TABLE为数据段中0100单元的符号名当中存放的内容为0FF00H下面两条指令有什么差别AX寄存器的内容各自是什么 1MOV AX,TABLE 2MOV AX,OFFSET TABLE 是传送TABLE中的内容。AX0FF00H 是传送TABLE的地址AX0100H 289.对于以下的数据定义三条MOV指令分别汇编成什么 TAB1 DW 10 DUP(?) TAB2 DB 10 DUP(?) TAB3 DB ‘1234’ MOV AX,LENGTH TAB1 汇编成 MOV AX,10 MOV BL,LENGTH TAB2 汇编成 MOV BL,10 MOV CL,LENGTH TAB3 汇编成 MOV CL,1 290MOV CX,DATA[SI] ;寄存器相对寻址 注意没有存储器间接寻址。也没有存储器相对寻址。 马上寻址 寄存器寻址寄存器直接寻址 寄存器间接寻址 直接寻址存储器直接寻址 寄存器相对寻址 基址变址寻址 相对基址变址寻址 291.无符号数比較时用“高于”或“低于”来做推断根据。 有符号数比較时用“大于”或“小于”来做推断根据。 低于 Below 高于 Above 大于 Greater 小于 Less 转移指令中大部分指令能够用两种不同的助记符来表示。比方。一个数低于还有一个数和一个数不高于也不等于还有一个数是等同的。 即JB和JNAE是等同的。 292.比較两个无符号数的大小 两个无符号数比較大小时机器依据CF标志位来推断大小。若两无符号数相减若不够减则最高位有借位CF1否则CF0. 所以 当CF1时说明被减数低于减数。 当CF0且ZF0时说明被减数高于减数。 当CF0且ZF1时。说明被减数等于减数 293. 无符号数比較条件转移指令表 294.变量TABLE中存放了一个偏移地址。当无符号数X小于、等于或大于此偏移地址时应去运行三个不同的程序段。 MOV BX,TABLE MOV AX,X CMP AX,BX JA SS3 JZ SS2 SS1… 低于程序段 SS2… 。等于程序段 SS3… 高于程序段 295.比較两个有符号数 两个有符号数比較大小时机器依据SF标志位来推断大小。 无溢出时OF0.若被减数小于减数。差值为负。则SF1。否则SF0. 溢出时。OF1此时SF标志位显示的正负性与应该得的正确结果值的正负性相反。SF0表示被减数小于减数SF1表示被减数大于减数。 当OF0且SF1或OF1且SF0时。即SF∨OF1。表示被减数一定小于减数。 当OF0且SF0且ZF0或OF1且SF1时此时ZF0。前数一定大于后数。 有符号数比較条件转移指令 296.试分析以下程序段的功能是什么 CMP AL,’A’ JC OTHER CMP AL,’Z’ JNZ OTHER JMP LETTER … OTHER:… LETTER:… 推断AL的内容若为‘A’~‘Z’的大写字母时程序段 LETTER处理否则转OTHER处理。 297.计算机中为便于存储及计算机的物理实现採用A。 A.二进制数 B.十进制数 C.八进制数 D.十六进制数 298.在86系列的CPU中。訪问IO设备採用B方式。 A.统一地址 B.独立地址 C.混合地址 D.直接地址 299.机器指令是在程序执行期间由计算机来执行的。 伪指令是汇编程序对源程序进行汇编时处理的。仅仅提供有关信息。不产生机器代码。 300.伪指令在程序B阶段被处理。 A.编写 B.汇编 C.连接 D.执行 301.在程序的開始能够用NAME或TITLE作为模块的名字。但NAME和TITLE伪指令不是必要的。 302.一个完整、独立的汇编语言源程序能够没有C伪指令。 A.段定义 B.存储模式定义 C.程序開始 D.程序结束 303.JMP NEAR PTR [BX]使用A段寄存器。 A.CS,DS B.DS,ES C.ES,SS D.DS,SS 304.响铃符的ASCII编码为D A.0DH B.OAH C.20H D.07H 305. 0~9的ASCII值为30H~39H 而字母A的ASCII值为41H 306.从微处理器的角度来看计算机结构可分为CPU、内存、和IO子系统三个主要部分。 307.汇编语言源程序中的每一个语句由4部分组成各自是名字、操作码助记符、操作数、和凝视。 308.指令MOV DL,1000H[SI]中。源操作数的地址是SI1000H. 309.汇编语言程序的最后一条指令是汇编结束伪指令。 310.能够改动其值的定义符号常量的伪指令是等号伪指令。 311.MOV AX,DATA 中AX的值是由操作系统在程序执行之前传过来的。 312. .STACK伪指令默认分配1024字节的栈空间。 313.在8086中。一个逻辑段最长为64K字节。 314.8086CPU加电后运行的第一条指令的物理地址为FFFF0000 或写成 FFFF0。 315.DB ‘AB’定义了2个字节。在内存中的16进制代码按顺序为41H。42H。 316.将寄存器AX置零 MOV AX,0 或者 XOR AX,AX 317.将寄存器AL的内容乘以BL的内容结果送到BX寄存器中。 MUL BL MOV BX,AX 318.若AX为零则转向短标号LABLE CMP AX,0 JZ LABEL 或者 OR AX,AX JZ LABEL 319.将AX的一个字输出到port3D9H MOV DX,3D9H OUT DX,AX 320.操作系统1号功能调用输入一个字符 MOV AH,01H INT 21H 321.已知在内存中有一个字节单元NUM存有带符号数据要求计算它的绝对值后放入RESULT单元中。 解 DATA SEGMENT X DB,? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AL,X CMP AL,0 JGE NEXT NEG AL NEXT: MOV RESULT,AL MOV AH,4CH INT 21H CODE ENDS END START 322.编写计算以下函数值的程序 Y1X0 0X0 -1X0 设输入数据为X输出数据为Y且都是字节变量。 解 DATA SEGMENT X DB -25 Y DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,X CMP AL,0 JGE BIG MOV BL,-1 JMP EXIT BIG:JE EE MOV BL,1 JMP EXIT EE:MOV BL,0 EXIT:MOV Y,BL MOV AH,4CH INT 21H CODE ENDS END START 323.程序把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示。 解 CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE START:PUSH DS SUB AX,AX PUSH AX MOV CH,H ;CH存放循环计数值 LP:MOV CL,4 ROL BX,CL MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JL PRINTA ADD AL,07H PRINTA:MOV DL,AL MOV AH,2 INT 21H DEC CH JNZ LP RET MAIN ENDP CODE ENDS END START 324.程序在ADDR单元中存放着数Y的地址编一程序把Y中1的个数存入COUNT单元中。 解要測出Y中1的个数就应逐位測试。能够依据最高有效位是否为1来计数。然后用移位的方法把各位数逐次移到最高位去。 TITLE 数1程序 DATA SEGMENT ADDR DW NUMBER NUMBER DW Y COUNT DW ? DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA START:PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV CX,0 MOV BX,ADDR MOV AX,[BX] REPEAT:CMP AX,0 JZ EXIT JNS SHIFT INC CX SHIFT:SHL AX,1 JMP REPEAT:REPEAT EXIT:MOV COUNT,CX RET MAIN ENDP CODE ENDS END START 325.JS SF1 ;结果为负则转移 JNS SF0 ;结果为正则转移 326.冒泡排序 解 DATA SEGMENT A DW N DUP(?) DATA ENDS PROGRAM SEGMENT MAIN PROC FAR ASSUME CS:PROGRAM,DS:DATA START:PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV CX,N DEC CX LOOP1MOV DI,CX MOV BX,0 LOOP2MOV AX,A[BX] CMP AX,A[BX2] JGE CONTINUE XCHG AX,A[BX2] MOV A[BX],AX CONTINUE:ADD BX,2 LOOP LOOP2 MOV CX,DI LOOP LOOP1 RET MAIN ENDP PROGRAM ENDS END START 327.偏移量偏移地址有效地址段内地址 328.程序在数组中有50个单字节有符号数分别统计0负数正数个数。 解 DATA SEGMENT X DB 50 DUP(?) N0 DB 0 N1 DB 0 N2 DB 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,50 MOV SI,0 PO:CMP X[SI],0 JNZ P1 INC N0 JMP P5 P1JL P3 INC N2 JMP P5 P3INC N1 P5INC SI DEC CX JNZ P0 MOV AH,4CH INT 21H CODE ENDS END START 注意 DEC CX JNZ P0 等价于 LOOP P0 329.过程定义伪指令 可把具有独立功能的程序段定义为过程。供其它程序调用。 过程名 PROC NEAR/FAR … RET 过程名 ENDP 调用 CALL [NEAR/FAR PTR] 子程序名 330.标志设置指令 331.字长为n 1无符号数范围 2有符号数范围 补码 原码、反码 332.BCD都是无符号数。 333. 17D 1压缩BCD码0001 0111B 17H 2非压缩BCD码0000 0001 0000 0111B 0107H 334. 235D 1压缩BCD码0010 0011 0101B 235H 2非压缩BCD码。。。。。。。。。 020305H 335. 14个寄存器 1通用寄存器 AX,BX,CX,DX 变址SI,DI,BP,SP 段寄存器CS,DS,SS,ES 控制寄存器 IP FLAGPSW 336.H计算机刚一启动时物理地址是多少 CSFFFF 其它寄存器全为0 物理地址(CS)*10H(IP)FFFF0H 337.代码段(CS)*10HIP 数据段(DS)*10HEA 堆栈段(SS)*10HSP 338.复习port号指令 IN OUT IN AL,78H ;78H是地址是把78Hport的内容送AL IN AL,DX ;DX是地址。用DX去找外设的地址然后取出内容送AL 339.实模式就是一般模式。就是我们经常使用的模式。 340.宏定义 宏名 MACRO 形參 … 宏名 ENDM 调用 宏名 实參 341.8086微处理器由哪几部分组成 EU BIU 342.80X86中。存储器为什么採用分段管理 1内部16位外部20位。所以要把20位地址分为不超过16位的段便于訪问。 2便于模块化编程。 343.IN输入指令 格式IN AL,IO地址表达式 或 IN AX,IO地址表达式 操作 AL(IO地址表达式) 或 AL(IO地址表达式1)。(IO地址表达式) 功能完毕IOport对累加器的数据输入。 344.OUT输出指令 格式OUT IO地址表达式。AL 或 OUT IO地址表达式。AX 操作IO地址表达式AL 或 IO地址表达式1IO地址表达式AL 功能完毕累加器对IOport的数据输出。 345.AND AL, TEST AL, 对标志位的影响一样AND最后结果送ALTEST最后结果不送AL。 类比 SUB AX。 CMP AX 346.空格的ASCII码是20H 347.显示字符代码 MOV DL,’字符’ MOV AH,02H INT 21H 348.输入字符代码 MOV AH,01H INT 21H 等待用户输入 349.试编制一程序从键盘输入一行字符要求第一个键入的字符必须是空格符。如不是则退出程序。如是。则開始接收键入的字符并顺序存放在首地址为BUFFER的缓冲区中空格符不存放。直到接收到第二个空格符时退出程序。 分析这一程序要求接收的字符从空格符開始又以空格符结束因此程序中必须区分所接收的字符是否是第一个字符。所以。设立作为标志的存储单元FLAG。一開始将其置为0。接收第一个字符后可将其置1. 解 DATA SEGMENT BUFFER DB 80 DUP(?) FLAG DB ? DATA ENDS CODES SEGMENT MAIN PROC FAR ASSUME CS:CODES,DS:DATA1 START:PUSH DS SUB AX,AX PUSH AX MOV AX,DATA1 MOV DS,AX LEA BX,BUFFER MOV FLAG,0 NEXT:MOV AH,01H INT 21H TEST FLAG,01H JNZ FOLLOW CMP AL,20H JNZ EXIT MOV FLAG,1 JMP NEXT FOLLOW:CMP AL,20H JZ EXIT MOV [BX],AL INC BX JMP NEXT EXIT:RET MAIN ENDP CODES ENDS END START 350.NEAR调用改变IP。不改变CS FAR调用改变IP改变CS 351.调用程序和子程序在同一代码段中 SEGX SEGMENT … MAIN PROC FAR 。主程序 … CALL SUBR1 子程序调用 … RET MAIN ENDP SUBR1 PROC NEAR 子程序定义 … RET SUBR1 ENDP … SEGX ENDS 352.调用程序和子程序不在同一个代码段中 SEGX SEGMENT … SUBT PROC FAR 子程序定义 … RET SUBT ENDP … CALL SUBT 子程序调用同一个段中调用 SEGX ENDS SEGY SEGMENT … CALL SUBT 子程序调用不同段中调用 … SEGY ENDS 353.普通子程序 CODE SEGMENT ASSUME CS:CODE START: … CALL 子程序1 … MOV AH,4CH INT 21H 子程序1 PROC NEAR … RET 子程序1 ENDP CODE ENDS END START 354.子程序作主程序 CODE SEGMENT ASSUME CS:CODE MAIN PROC FAR START:PUSH DS XOR AX,AX PUSH AX CALL 子程序1 … RET MAIN ENDP 子程序1 PROC NEAR … RET 子程序1 ENDP 355.状态标志位 0011 1101 1101 1011 0001 1000 356.各种DEBUG命令 A命令——汇编 G命令——运行 T命令——跟踪运行 U命令——反汇编 D命令——显示内存 E命令——将内容写入内存 R命令——改动寄存器 357.寻址方式 1马上寻址MOV AX,7896H 2寄存器寻址MOV AX,BX 3存储器直接寻址MOV AX,[3792H] 4寄存器间接MOV AX,[BX] 358.不考 1串操作指令 2BCD调整失灵·指令 3折半查找 359. P73 中断 要保护PSW 360. ORG 200H X DB 78H,96H,’ABCD’,2 DUP(?) Y DW 78H,’AB’,X5,$ 361. 选择 2’*10 填空 1’*20 读程序 5’*6 推断 1’*5 编程 25’ 必考冒泡排序 362.RET返回指令 1段内返回 操作 IP((SP)1(SP)) SP(SP)2 2段间返回 操作 IP((SP)1(SP)) SP(SP)2 CS((SP1),(SP)) SP(SP)2 363. MOV AX,1234H 马上寻址 MOV AX,BX 寄存器直接寻址 MOV AX,[BX] 寄存器间接寻址 MOV AX,TABLE TABLE是一个变量名存储器直接寻址 MOV AX,[1234H] 存储器直接寻址 MOV AX,[BX1234H] 寄存器相对寻址 MOV AX,[BP][SI] 基址变址寻址 MOV AX,[BXSI-1234H] 相对基址变址寻址 364.求AL中的内容 ABC EQU 2 DATA1 DB 20H DATA2 DW 1000H … START:MOV AL,DATA1ABC 所以AL10H 365.MOV CS,AX 错误 由于: 不能直接向段寄存器传送数据 CS的值不能由人为改动 366.在8086/8088微处理器中PUSH和POP指令在堆栈与寄存器或存储单元之间传送数据时一次总是传送2个字节。 367.INC [BX] ;错误 由于[BX]所指单元中的内容类型不确定不知道是字节类型还是字类型不同类型自加的大小不一样。字节类型自加1字类型自加2 368.ENDS ENDP ENDM 369.做P106 4.3 P107 4.12 370.子程序作主程序。必须用FAR 371怎样进行宏展开 INOUT MACRO X,Y X。Y是形參 MOV AH,X LEA DX,Y INT 21H ENDM 程序中遇到 INPUT 9INPUT 9。INPUT是实參 则展开为 MOV AH,9 LEA DX,INPUT INT 21H 372.期中考试2个编程。 373.XLAT换码指令 格式XLAT 或 XLAT 地址标号 操作(AL)((BX)(AL)) 说明1XLAT指令是将AL的内容替换成存储单元中的一个数往往用于代码转换比如把字符的扫描码转换成ASCII码或者把十六进制数0~F转换成七段数码管显示代码。 使用该指令前先在数据段建立一个表格表格首地址存入BX寄存器中欲代替码的表内位移量存入AL寄存器。 374.期中 -64D的补码是C0H。 375.期中 运行CALL指令寄存器IP的内容一定改变。 376.下列指令中哪条是正确的D A.MOV DS,0200H B.MOV AX,[SI][DI] C.MOV BP,AX D.MOV BYTE PTR [BX],1000 A错马上数不能直接送段寄存器。即段寄存器仅仅能通过寄存器或存储单元传送。 B错源操作数都是变址寄存器。 C错普通寄存器不能向变址寄存器传数据。 377.使8086/88的标志寄存器F中的中断标志I置为关中断的命令是CLI。 378.指令LOOPZ标号转移到标号循环的条件是 CX!0且ZF1. 379.SUB AX,[BX]目的操作数的寻址方式是寄存器直接寻址源操作数採用的寻址方式是寄存器间接寻址。 380. 8086CPU内部按功能分为两大部分即EU和BIU。 381. 8088微处理器段内直接寻址64KB字节空间。若寻址1MB字节空间必须通过段寄存器管理实现。 382.设SS2000H。SP0486H若在堆栈中取出3个数据。则栈顶的物理地址为2048CH。假设又在堆栈中存入3个数据则栈顶的物理地址是20486H。 注意堆栈中数据的压入弹出必须以字节为单位所以PUSH和POP指令仅仅能作字操作。 383.中断系统的中断矢量表用来存放中断类型号共预留了1KB个字节空间。 384.A、B两数相等的条件能够用FR中的ZF标志位为1来推断。 385.15D的原码是00001111。反码是00001111补码是00001111压缩BCD码是15H。 386.MOV AX,9876H MOV DL,0 MOV CX,16 AGAIN:SHL AX,1 JNC NEXT INC DL NEXT:LOOP AGAIN MOV SUM,DL 程序的功能是数AX中1的个数。 SUM的值是8 387.已知AL3分析下列程序段 SHL AL,1 MOV BL,AL SHL AL,1 SHL AL,1 ADD AL,BL SHL AL,1 程序完毕的功能是AL扩大20倍运行后结果是AL60. 388.绘图说明下列语句所分配的存储空间及初始化的数据值。 1BYTE_VAR DB ‘BYTE’,12,-12H,3 DUP(0,?,2 DUP(1,2),?) 2WORD_VAR DW 5 DUP(0,1,2),?,-5,’BY’,’TE’,256H 389. DATA_BYTE DB 10,4,10H DATA_WORD DW 100,100H,-5 DATA_DW DD 3C,0FFFDH 390. 391.操作数能够保留存储空间。但不存入数据。得到程序执行时存放中间或终于结果。 ABC DB 0,?,?,0 DEF DW ?,52,? 392.ARRAY1 DB 2 DUP(012?) ARRAY2 DB 100 DUP(?) 393.ARRAY3 DB 100 DUP(0,2 DUP(1,2),0,3) 394.依据伪指令代码写内存情况是难点和必考点。应该再次复习。尤其搞懂关于字符串的存放问题DB和DW是不一样的应再次学习。 395.BP、SP可称为指针寄存器 SI、DI可称为变址寄存器 396.一般在作双字长运算时把DX和AX组合在一起存放一个双字长数DX用来存放高位字。 397. 第7位 第0位 398.段寄存器也是一种专用寄存器。专用于存储器寻址用来直接或间接的存放地址。段寄存器的长度为16位。 注SP/BP/SI/DI也是16位。 399.在存储器里以字节为单位存储信息。 400.为了正确的存放或取得信息。每个字节单元给出一个唯一的存储器地址称为物理地址。地址从0開始编号顺序的每次加1因此存储器的物理地址空间是线性增长的在机器里地址是用二进制表示的是无符号整数。书写格式使用十六进制数形式。 401.地址编号的范围用十六进制数表示为0000H~FFFFH。 402.存储器特性内容是能够重复读取的。仅仅有当存入新的信息后。原来的内容就自己主动被覆盖了。 403.8080/8088仅仅能在实模式下工作仅仅需了解实模式。 404.80X86存储器在实模式下同意的最大寻址空间为1MB。由于地址总线宽度为20位。 405.每一个段的大小可达64KB。由于地址寄存器是16位的这样段内地址可用16位表示。 406.在1MB的存储器里每个存储单元都有一个唯一的20位地址。称为该存储单元的物理地址。 407.CS存放当前正在执行的程序 DS存放当前执行程序的数据 SS定义了堆栈所在区域。 ES是附加数据段 408.段寄存器和偏移地址的默认组合 409.寻址方式分为数据寻址和指令寻址 410.假设指令中指定的寄存器是BX/SI/DI。则操作数默认在DS中假设指定的寄存器是BP。则操作数默认在SS中。 411.马上数不能直接送段寄存器即段寄存器仅仅能通过寄存器或存储单元传送数据。 412.两个段寄存器之间不能直接传送数据。 413.PUSH: (SP)(SP)-2 ((SP)1(SP))(SRC) //理解 414.POP: (DST)((SP)1,(SP)) (SP)(SP)2 415.XCHG指令 1源、目的操作数的寻址方式不同意是马上寻址方式。 2两个寻址方式中必须有一个是寄存器寻址两个存储单元之间不能直接互换数据 416.NEG指令 0-操作数-操作数。在微型计算机中带符号的二进制数都採用补码表示。所以此处的操作数是补码所以求 –操作数 就是求补操作。 417.将AX乘以10 分析十进制数10的二进制形式为1010。即权为2和权为8的位为1故採用2*AX8*AX结果为10*AX SHL AX,1 MOV BX,AX SHL AX,1 SHL AX,1 ADD AX,BX 418. 419.有符号数比較大小机器依据SF标志位来推断大小。即若被减数小于减数差值为负则SF1否则SF0。前提是无溢出 OF0. 420.语句格式 [标号] 助记符 [操作数] [;凝视] 即汇编语句由4部分组成标号。助记符操作数。凝视 421.名字的定义规则 1数字不能作为名字的第一个符号。 2单独的问号不能作为名字。 3一个名字的最大有效长度为31超过31的部分计算机不再识别。 4特定含义的保留字。操作码寄存器名不能作为名字。 422.汇编字符串用单引號。如‘ABC’ 423.逻辑运算符和逻辑运算指令是有差别的。 逻辑运算符的功能在汇编阶段完毕逻辑运算指令的功能在运行时完毕。 424. AND AL,78H AND 0FH 汇编后。等价于 AND AL,08H 第一个AND是逻辑运算指令第二个AND是逻辑运算符 425.在汇编阶段处理伪指令、宏指令、运算符 426.为什么说程序開始伪指令是能够省略的 答由于程序開始是用NAME或TITLE作为模块的名字并非必须的。 而结束伪指令 END则是必须的。 427.对于以下的数据定义。各条MOV指令单独运行后有关寄存器的内容是什么 FLDB DB ? TABLEA DW 20 DUP(?) TABLEB DB ‘ABCD’ MOV AX,TYPE FLDB MOV AX,TYPE TABLEA MOV CX,LENGTH TABLEA MOV DX,SIZE TABLEA MOV CX,LENGTH TABLEB 428.某系列微机对存储器分段。假设每个段最多的字存储单元16位二进制是32K。那么表示段内字节单元偏移地址的二进制位数应是B A.20位 B.16位 C.15位 D.12位 429. ORG 0030H DA1 DB 0,’0’,30H DW DA1 数据为3000H字存储单元的偏移地址是A A.0030H B.0031H C.0032H D.0033H 430.NUM1 DB (12 OR 6 AND 2) GE 0EH NUM2 DB (12 XOR 6 AND 2) LE OEH 上述数据定义中NUM1和NUM2字节单元的内容各自是B NUM10NUM20 NUM10NUM20FFH NUM10FFH , NUM20 NUM10FFH , NUM20FFH 431.MOV指令中目的操作数不能为马上数和CS。 432.R命令显示寄存器的内容然后改动其值。 433.8086/8088 CPU可訪问2个独立的地址空间一个为存储器地址空间大小为1MB个字节还有一个为IOport大小为64KB字节。 434.运行下列指令后AX寄存器中的内容是什么 START DW 10H,20H,30H,40H,50H EE1 DW 3 … MOV BX,OFFSET START ADD BX,EE1 MOV AX,[BX] 解AX3000H 435.指令的操作数中同意出现表达式比如BUF1与BUF2均为变量名以下指令中语法正确的是D A.MOV AX,BUF1*BUF2 B.MOV AX,BUF1/BUF2 C.MOV AX,BUF1ES:BUF2 D.MOV AX,BUF2-BUF1 436.在8086/8088的马上数寻址方式中对寄存器的使用下列说法正确的是D A.使用AX,BX,CX,DX B.使用SI,DI,BP,SP C.使用任一个通用寄存器 D.不使用不论什么寄存器 437.在DEBUG中为查看或改动内存单元的内容。使用的命令是A A. D或E B. D或R C. R或E D. D或U E命令将内容写入内存 R命令显示寄存器的内容然后改动其值 438.对CS段寄存器赋段地址的方法是B A.MOV AX,CODE MOV CS,AX B.ASSUME CS:CODE C.END起始地址 D.MOV CS,2050H 439.设SP4AH运行段内返回指令RET 4后。SP的值是A A.50H B.48H C.4CH D.44H 解 1段内带马上数返回 格式RET 表达式 运行的操作 IP((SP1),(SP)) SP(SP)2 SP(SP)16位表达式的值 2段间带马上数返回 格式RET 表达式 运行的操作 IP((SP)1(SP)) SP(SP)2 CS((SP)1(SP)) SP(SP)2 SP(SP)16位表达式的值 440.8086CPU中一个段最大可定义的字节数是C A.61K B.32K C.64K D.1M 441.软中断指令INT 21H运行若AH9时则完毕的功能是显示字符串。 442.8086存储器地址分段时每一个段起始地址的特征是段首地址能被16整除。 443.JMP NEAR LAB ;错误 改成 JMP NEAR PTR LAB 444.编写指令将附加段中的一个字节变量COUNT送给AL寄存器。 MOV BX,OFFSET COUNT MOV AL,ES:[BX] 445.CMP [SI][DI] 错误 源、目的操作数不能同一时候为变量 446.最后移位指令吐血总结 1SAL/SHL:作用一样最低位补0。 2SAR:算术右移最高位补原先的那个最高位的数值 SHR:逻辑右移最高位补0。 ROL循环左移依次移到最低位 ROR: 循环右移依次移到最高位 RCL:带进位的循环左移每一位先加上CF的值然后循环左移到最低位。原来的CF移到最低位 RCR:带进位的循环右移每一位先加上CF的值。然后依次右移到最高位原来的CF移到最高位。 github主页https://github.com/chenyufeng1991 。欢迎大家訪问。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929875.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!