《最新复习ppt课件ppt课件.ppt》由会员分享,可在线阅读,更多相关《最新复习ppt课件ppt课件.ppt(154页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第1章 汇编语言基础3456789知识点知识点55、哪个标志位表示无符号数运算结果、哪个标志位表示无符号数运算结果的特征?哪个标志位表示有符号数的特征?哪个标志位表示有符号数运算结果的特征?如何判断?运算结果的特征?如何判断? 计算机内用进位标志计算机内用进位标志CF表示两个无符号数表示两个无符号数运运算结果的特征。算结果的特征。CF=1表示它们的加法有表示它们的加法有“进进位位”,或者它们的减法有,或者它们的减法有“借位借位”;CF=0则则表示没有产生进位或借位。表示没有产生进位或借位。 “溢出标志溢出标志OF”表示有符号数运算特征表示有符号数运算特征. OF= 1表示运算结果超过了表示范围
2、表示运算结果超过了表示范围, 称为称为“溢出溢出”;OF=0没有产生溢出。没有产生溢出。10知识点知识点66、内存储器容量由什么决定?、内存储器容量由什么决定?地址总线的位数地址总线的位数8086CPU有有20位地址线,则内位地址线,则内存储器容量为存储器容量为1MB = 220B.11知识点知识点77、给定一个内存地址,如何读出、给定一个内存地址,如何读出/写写入该地址内的字节数据入该地址内的字节数据/字数据字数据/双双字数据?字数据?12字数据:字数据:(00010H)=203EH双字数据:双字数据:(00010H)=5A2F203EH字节数据:字节数据:(00010H)=3EH从从000
3、10H单元分别读取单元分别读取1个字节数据、个字节数据、1个字数据和个字数据和1个双字数据个双字数据.3EH20H2FH5AH00010H00011H00012H00013H13若当前存储器内容如下所示若当前存储器内容如下所示, 将将1个字数据个字数据1E22H写入写入00012H单元。单元。3EH20H2FH5AH00010H00011H00012H00013H22H1EH14知识点知识点88、什么是逻辑地址?什么是物理地址?、什么是逻辑地址?什么是物理地址?掌握如何通过逻辑地址计算物理地掌握如何通过逻辑地址计算物理地址。址。151.14:若:若8086某存储单元物理地址为某存储单元物理地址
4、为12345H,则与它对应的逻辑地址中,则与它对应的逻辑地址中,偏移地址及段地址的最大值和最小值分偏移地址及段地址的最大值和最小值分别为多少?别为多少? 偏移地址最小值:偏移地址最小值:0005H 段地址最大值:段地址最大值:1234H 偏移地址最大值:偏移地址最大值:FFF5H 段地址最小值:段地址最小值:0235H161.15: 8086中最多可以有多少个不中最多可以有多少个不同的段地址?同的段地址? 65536个个171、一个、一个16个字的数据区个字的数据区, 其起始地其起始地址为址为1234H:1000H.计算该数据区计算该数据区首、末字单元的物理地址。首、末字单元的物理地址。 首字
5、单元地址首字单元地址1234H16D+1000H=13340H末字单元地址末字单元地址13340H+(16-1)2=13340H+1EH =1335EH182、如果一个程序开始执行之前,、如果一个程序开始执行之前,(CS)=1234H, (IP)=5678H,则该,则该程序段的第一个字的物理地址是程序段的第一个字的物理地址是多少?多少?1234H16D+5678H=179B8H19知识点知识点99、掌握、掌握8086CPU的寄存器的用途。的寄存器的用途。 哪些寄存器可存放偏移地址?哪些哪些寄存器可存放偏移地址?哪些寄存器可存放段地址?寄存器可存放段地址?汇编源程序指令中不能出现哪些寄汇编源程序
6、指令中不能出现哪些寄存器名?存器名?掌握标志寄存器中的各个状态标志掌握标志寄存器中的各个状态标志位的含义。位的含义。20AX,AL 在乘除法指令中作累加器在乘除法指令中作累加器 在在I/O指令中作数据寄存器指令中作数据寄存器AH 在在LAHF/SAHF指令中作目的指令中作目的/源寄存器源寄存器AL 在在BCD、ASCII码数据运算时作累加器码数据运算时作累加器 在在XLAT指令中作变址寄存器指令中作变址寄存器BX 间接寻址时作地址寄存器间接寻址时作地址寄存器 基址寻址、基址变址寻址时作基址寄存器基址寻址、基址变址寻址时作基址寄存器 在在XLAT指令中作基址寄存器指令中作基址寄存器CX 循环、数
7、据串指令中作循环次数寄存器循环、数据串指令中作循环次数寄存器CL 移位、循环移位指令中的移位次数寄存器移位、循环移位指令中的移位次数寄存器DX I/O指令存放端口号指令存放端口号 在乘除法指令中存放在乘除法指令中存放32位数据的高位数据的高16位位21堆栈指针寄存器堆栈指针寄存器SP (stack pointer)存放存放栈顶偏移地址。栈顶偏移地址。基址指针寄存器基址指针寄存器BP (base pointer)存放存放堆栈段中数据的偏移地址。堆栈段中数据的偏移地址。源变址寄存器源变址寄存器SI (source index)存放源数存放源数据区的偏移地址,用于寻址串指令的源数据区的偏移地址,用于
8、寻址串指令的源数据串。据串。目的变址寄存器目的变址寄存器DI (destination index)存存放目的数据区的偏移地址,用于寻址串指放目的数据区的偏移地址,用于寻址串指令的目的数据串令的目的数据串地址寄存器地址寄存器22CS (code segment)代码段寄存器代码段寄存器DS (data segment)数据段寄存器数据段寄存器SS (stack segment)堆栈段寄存器堆栈段寄存器ES (extra segment)附加段寄存器附加段寄存器16位寄存器位寄存器,存放相应段的段地址存放相应段的段地址段寄存器段寄存器23IP (instruction pointer)指令指针寄
9、指令指针寄存器,存放代码段中的偏移地址。在程存器,存放代码段中的偏移地址。在程序运行时,总是指向下一条指令的偏移序运行时,总是指向下一条指令的偏移地址,与地址,与CS一起确定下一条指令的物理一起确定下一条指令的物理地址。地址。FLAGS标志寄存器,记录指令操作后标志寄存器,记录指令操作后结果的状态信息或控制处理器的标志。结果的状态信息或控制处理器的标志。专用寄存器专用寄存器24l8086/8088CPU寄存器中可以存放段地寄存器中可以存放段地址的有址的有_.l8086/8088CPU寄存器中可以存放偏移寄存器中可以存放偏移地址的有地址的有_.l在程序运行时在程序运行时, 下一条将要执行的指令下
10、一条将要执行的指令的地址存放在的地址存放在_段寄存器与段寄存器与_寄存寄存器中器中.l指令中不能出现的寄存器是指令中不能出现的寄存器是_.CS, DS, SS, ESBX, SI, DI, SP, BP, IPCSIPIP, FLAGS25-100-120-100补补=1001 1100120补补= 0111 1000 0010 0100CF=0OF=1SF=0ZF=0PF=1若加法有进位或减法有若加法有进位或减法有借位借位,CF=1,否则否则CF=0.若两同号数相加得异号数若两同号数相加得异号数;或异或异号数相减后结果与减数符号相号数相减后结果与减数符号相同同,则则OF=1,否则否则OF=0
11、.运算结果为负数则运算结果为负数则SF=1,否则否则SF=0.运算结果运算结果=0则则ZF=1,否则否则ZF=0.运算结果低运算结果低8位有位有偶数个偶数个1则则PF=1,奇奇数个数个1则则PF=0.第2章 数据定义与传送27掌握的伪指令掌握的伪指令段定义伪指令段定义伪指令数据定义伪指令数据定义伪指令DB、DW、DDASSUME伪指令伪指令END伪指令伪指令处理器选择伪指令处理器选择伪指令ORG伪指令伪指令28掌握的指令掌握的指令掌握的指令,特别注意指令格式掌握的指令,特别注意指令格式:nMOVnLEAnLDS, LESnMOVZX, MOVSX, CBW,CWD,nXCHGnXLATnPUS
12、H, POP29知识点知识点11、掌握定义变量的方法、掌握定义变量的方法伪指令伪指令DB、DW、DD、DQ、DT的的作用?通过上述伪指令定义后的变量作用?通过上述伪指令定义后的变量具有哪些属性?具有哪些属性?当定义的数据是常数、表达式、变量当定义的数据是常数、表达式、变量/标号名、字符串、标号名、字符串、?或者或者$时,内存中时,内存中相应的存放内容是什么?相应的存放内容是什么?复制操作符复制操作符DUP的作用的作用伪指令伪指令ORG的作用。的作用。30习题习题2.1某数据段内有如下数据定义:某数据段内有如下数据定义:X DB 30, 30H, ABC, 2-3, ?, 11001010B D
13、W 0FFH,-2, “CD”Y DD 20 dup(15, 3 dup(?), 0)Z DB 3 dup(?)W DW Z-X假设变量假设变量X的偏移地址为的偏移地址为20H。 写出变量写出变量X各数据在内存中各数据在内存中 的具体位置和相关内存单元的值。的具体位置和相关内存单元的值。 写出变量写出变量Y,Z的偏移地址。的偏移地址。写出变量写出变量W的值的值Y的偏移地址的偏移地址002EHZ的偏移地址的偏移地址01BEH W的值的值 019EH30H41H1EH X42H43H0FFH00H0CAH0FFH00H0FFH0FEH44H43HDS:0020HDS:0021HDS:0022HDS
14、:0023HDS:0024HDS:0025HDS:0026HDS:0027HDS:0028HDS:0029HDS:002AHDS:002BHDS:002CHDS:002DHDS:002EH31知识点知识点22、掌握指令操作数、掌握指令操作数汇编指令可以有哪几种操作数?分汇编指令可以有哪几种操作数?分别以何种形式出现在指令中?别以何种形式出现在指令中?如何判断指令中的操作数是立即数、如何判断指令中的操作数是立即数、寄存器数、还是存储器数?寄存器数、还是存储器数?对于存储器操作数,如何求出该存对于存储器操作数,如何求出该存储器操作数在内存中的物理地址?储器操作数在内存中的物理地址?即如何取得该存储
15、器操作数。即如何取得该存储器操作数。32注意注意1:8086/8088CPU中,中,IP/FLAGS不能不能作为操作数出现在指令中。作为操作数出现在指令中。如指令如指令:MOV FLAGS, 1234H 错误错误注意注意2:8086/8088CPU中,用来间接寻址的中,用来间接寻址的寄存器有:寄存器有:BX、BP、SI、DI。33习题习题2.5现有现有(DS)=2000H, (BX)=0100H, (SI)=0002H, (20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=
16、0B7H,(21203H)=65H,说明下列指令执行,说明下列指令执行后后AX寄存器的内容。寄存器的内容。 MOV AX, 1200H MOV AX, BX MOV AX, 1200H MOV AX, BX MOV AX, 1100HBX MOV AX, BXSI MOV AX, 1100HBXSI(AX)=1200H(AX)=(BX)=0100H(AX)=(21200H)=4C2AH(AX)=(20100H)=3412H(AX)=(21200H)=4C2AH(AX)=(20102H)=7856H(AX)=(21202H)=65B7H34知识点知识点34、MOV指令指令MOV指令会影响标志位吗
17、?指令会影响标志位吗?MOV指令执行后源操作数和目的操指令执行后源操作数和目的操作数的内容发生变化吗?作数的内容发生变化吗?SRC和和DEST必须有相同类型吗?如必须有相同类型吗?如何改变或指定操作数类型呢?何改变或指定操作数类型呢?DEST可以是立即数或可以是立即数或CS寄存器吗?寄存器吗? 可以直接在两个存储器数之间传送吗?可以直接在两个存储器数之间传送吗?可以直接在两个段寄存器之间传送吗?可以直接在两个段寄存器之间传送吗?可以将立即数直接传送给段寄存器吗?可以将立即数直接传送给段寄存器吗?35习题习题2.4判断下列指令是否正确判断下列指令是否正确,指出错误原因指出错误原因.lMOV AX
18、, EBX 正确正确lMOV SI, DL错误错误, 两个操作数类型不匹配两个操作数类型不匹配lMOV EBP, ESPEAX*3错误错误,比例因子不能为比例因子不能为3lLEAAX, 3006H错误错误,源操作数应为内存操作数源操作数应为内存操作数lMOV BPDI, 0错误错误,操作数类型无法确定操作数类型无法确定lMOV SI, DI 错误错误,同时出现两个内存操作数同时出现两个内存操作数lMOV ES, 1000H错误错误,立即数不能直接送段寄存器立即数不能直接送段寄存器lMOV AX, X+2若若X用用EQU定义的符号或用定义的符号或用DW定义定义的内存变量的内存变量, 指令正确指令
19、正确, 否则错误否则错误lMOV AX, CX+2 错误错误,不可计算的不可计算的“常数表达式常数表达式”MOV EAXEAX*2正确正确36习题习题2. 8 指出下列指令的错误。指出下列指令的错误。 MOV Y, X 同时出现了两个存储器操作数同时出现了两个存储器操作数 MOV BL, 04B8H 操作数类型不匹配操作数类型不匹配 MOV AL, Z 操作数类型不匹配操作数类型不匹配 MOV BX, 3 操作数类型不能确定操作数类型不能确定 MOV BX, DI 两个操作数不能都是存储器数两个操作数不能都是存储器数 MOV DS, DATA 立即数直接送段寄存器立即数直接送段寄存器 MOV
20、NUM, AX 立即数不能用作目的操作数立即数不能用作目的操作数 MOV ES, DS 不能在段寄存器之间直接传输不能在段寄存器之间直接传输 MOV AX,FLAGS 指令中不能出现指令中不能出现FLAGSMOV CS,AX CS寄存器不能用作目的操作数寄存器不能用作目的操作数37知识点知识点44、LEA指令指令若若X是变量名是变量名,则指令则指令LEA BX, X与哪与哪条指令等价条指令等价?LEA指令的源操作数可以是立即数或指令的源操作数可以是立即数或寄存器数吗?寄存器数吗?LEA指令的目的操作数可以是立即数、指令的目的操作数可以是立即数、存储器数吗?可以是存储器数吗?可以是8位寄存器吗?
21、位寄存器吗? LEA指令影响标志位吗?指令影响标志位吗?MOV BX, OFFSET X38注意注意:LEA指令的源操作数是存储器指令的源操作数是存储器数,而目的操作数是数,而目的操作数是16位寄存器。位寄存器。 LEA AX, 201EH LEA 3105H, SI LEA BL, X 395、其他传送指令、其他传送指令LDS、LES的功能分别是什么?指令格式是什的功能分别是什么?指令格式是什么?影响标志位吗?么?影响标志位吗?CBW/CWD指令是对无符号数进行扩展呢还指令是对无符号数进行扩展呢还是对有符号数进行扩展?那么如何对无符号是对有符号数进行扩展?那么如何对无符号数进行扩展呢?数进行
22、扩展呢?MOVZX/MOVSX指令的功能和格式是什么?指令的功能和格式是什么?在汇编源程序中使用该指令时需要加入哪条在汇编源程序中使用该指令时需要加入哪条伪指令?伪指令?XCHG指令会改变源操作数和目的操作数内指令会改变源操作数和目的操作数内容吗?操作数可以是立即数吗?源操作数和容吗?操作数可以是立即数吗?源操作数和目的操作数类型要求相同吗?源操作数和目目的操作数类型要求相同吗?源操作数和目的操作数可以同时为存储器数吗?的操作数可以同时为存储器数吗? XLAT指令有什么应用?指令有什么应用?知识点知识点540实验报告实验报告1: 3、编写程序:数据段中有一字节变量、编写程序:数据段中有一字节变
23、量X,X的值为的值为0H0FH(即一位(即一位16进制数码),利用换码进制数码),利用换码XLAT指令将指令将X所代表所代表的一位的一位16进制数码转换为它所对应的进制数码转换为它所对应的16进制数字字符的进制数字字符的ASCII码码值。值。DATA SEGMENT X DB 0BHHEX DB 0123456789ABCDEFDATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX, DATA MOV DS, AXLEA BX, HEXMOV AL, X XLAT MOV X, AL MOV AX, 4C00H INT 21H CO
24、DE ENDS END START416、堆栈、堆栈如何定义堆栈段?堆栈段的用途及结构特如何定义堆栈段?堆栈段的用途及结构特点?如何取得堆栈段的栈顶物理地址?点?如何取得堆栈段的栈顶物理地址?进栈进栈/出栈操作对堆栈如何影响?进栈出栈操作对堆栈如何影响?进栈/出出栈的数据可以是字节数据吗?栈的数据可以是字节数据吗?PUSH指令格式?影响标志位吗?指令格式?影响标志位吗?POP指令的操作数可以是立即数、指令的操作数可以是立即数、CS寄存寄存器吗?影响标志位吗?器吗?影响标志位吗? 如何使用如何使用PUSHF和和POPF指令访问标志寄指令访问标志寄存器内容?存器内容?知识点知识点642分析下列指令
25、正确与否。分析下列指令正确与否。PUSH AXPUSH CSPUSH BXPUSH XPUSH ALPUSH 1234H操作数为操作数为16位寄存器位寄存器,正确正确操作数为操作数为16位段寄存器位段寄存器,正确正确错误错误,存储器操作数类型不明存储器操作数类型不明确确,应修改为应修改为:PUSH WORD PTRBX若若X是是DW定义的变量定义的变量,则正确则正确错误错误! 堆栈操作必须以字堆栈操作必须以字(或双或双字字)为单位为单位,不允许字节堆栈不允许字节堆栈8086CPU不允许立即数不允许立即数操作数操作数.80386允许允许.43分析下列指令正确与否。分析下列指令正确与否。POP D
26、SPOP CSPOP BXPOP XPOP ALPOP 32FAH操作数为操作数为16位段寄存器位段寄存器,正确正确POP指令操作数不能是指令操作数不能是CS,错误错误错误错误,存储器操作数类型不明存储器操作数类型不明确确,应修改为应修改为:POP WORD PTRBX若若X是是DW定义的变量定义的变量,则正确则正确错误错误! 堆栈操作必须以字堆栈操作必须以字(或双或双字字)为单位为单位,不允许字节堆栈不允许字节堆栈POP指令的操作数不允指令的操作数不允许为立即数许为立即数.441、已知堆栈段寄存器、已知堆栈段寄存器SS的内容是的内容是0FFA0H,堆栈,堆栈指针寄存器指针寄存器SP的内容是的
27、内容是00B0H,先执行两条把先执行两条把8057H和和0F79H分别进栈的分别进栈的PUSH指令,再执行指令,再执行一条一条POP指令。请画出堆栈区和指令。请画出堆栈区和SP的内容变化的内容变化过程示意图(标出存储单元的物理地址)。过程示意图(标出存储单元的物理地址)。 FFA0H:00ABH FFA0H:00ACHFFA0H:00ADH FFA0H:00AEH FFA0H:00AFHSPFFA0H:00B0H (1)执行指令前执行指令前 FFA0H:00ABH FFA0H:00ACHFFA0H:00ADHSPFFA0H:00AEH57H FFA0H:00AFH80HFFA0H:00B0H(
28、2)执行第一条执行第一条PUSH指令后指令后 45 FFA0H:00ABHSPFFA0H:00ACH79HFFA0H:00ADH0FH FFA0H:00AEH57H FFA0H:00AFH80HFFA0H:00B0H(3)执行第二条执行第二条PUSH指令后指令后 FFA0H:00ABHFFA0H:00ACH79HFFA0H:00ADH0FHSPFFA0H:00AEH57H FFA0H:00AFH80HFFA0H:00B0H(4)执行执行POP指令后指令后 46知识点知识点77、掌握操作数表达式、掌握操作数表达式EQU伪指令与伪指令与 =伪指令的区别是什么?伪指令的区别是什么?指令中的立即数、寄
29、存器操作数和存储器操指令中的立即数、寄存器操作数和存储器操作数都可以用表达式代替吗?作数都可以用表达式代替吗?哪些操作符可以用于立即数表达式?哪些操哪些操作符可以用于立即数表达式?哪些操作符可以用于存储器操作数表达式?作符可以用于存储器操作数表达式?指令指令MOV BL, X+5,当,当X是变量时指令的含是变量时指令的含义是什么?当义是什么?当X是用是用EQU定义的常量时,指定义的常量时,指令含义又是什么?令含义又是什么?运算符运算符SEG、OFFSET、TYPE、LENGTH和和SIZE的作用分别是什么?的作用分别是什么? 47有如下数据段定义有如下数据段定义, 完成下列要求:完成下列要求:
30、 DATA SEGMENTL1 DB 30 DUP(?)L2 DB 1,7,8,3,2DATA ENDS(1)将将L1的偏移地址送的偏移地址送BX.(2)用一条指令把用一条指令把L2的头两个字节内容送的头两个字节内容送SI.(3)用用EQU定义符号定义符号L的值等于的值等于L1的实际长度的实际长度. MOV BX, OFFSET L1或或 LEA BX, L1 MOV SI, WORD PTR L2L EQU L2-L148(1)若有定义若有定义:DATA SEGMENT X DB 12,22,32,42,52,62,72DATA ENDS则指令则指令MOV BL, X+5被汇编为被汇编为?(
31、2)若有定义若有定义: X EQU 12则指令则指令MOV BL, X+5被汇编为被汇编为?汇编为汇编为:MOV BL, 62汇编为汇编为: MOV BL, 17注意注意: (1)中定义的中定义的X是是变量变量. 指令中的指令中的X+5是是存储器操作数存储器操作数.注意注意: (2)中定义的中定义的X是是符号常数符号常数. 指令中的指令中的X+5是立即数操作数是立即数操作数.49如数据段定义如下如数据段定义如下, 分析下列指令分析下列指令. DATA SEGMENT ARRAY DW 100 DUP (?) TABLE DB ABCDDATA ENDS ADD SI, TYPE ARRAY A
32、DD SI, TYPE TABLE MOV CX,LENGTH ARRAY MOV CX,LENGTH TABLE MOV CX,SIZE ARRAYMOV CX,SIZE TABLETYPE 变量变量/标号标号 功能功能:回送变量回送变量/标标号的类型号的类型汇编汇编ADD SI,2汇编汇编ADD SI,1MOV CX,100汇编汇编MOV CX,1汇编汇编MOV CX,200汇编汇编MOV CX,1汇编汇编LENGTH 变量变量功能功能:回送由回送由DUP定义定义的变量的单元数的变量的单元数,其它其它情况回送情况回送1SIZE 变量变量 功能功能:回送变量回送变量/标号的标号的LENGTH
33、*TYPE的值的值 第3章 数据运算与输入/输出51掌握的指令掌握的指令nADD,ADC,INC,SUB,SBB,DEC,NEG,MUL,IMUL,DIV,IDIVnLOOPnAND, OR, XOR, NOTnSHL, SHR, SAL, SAR, ROL, ROR, RCL, RCRnCLC, STC, CMC, CLD, STD, CLI, STI52知识点知识点11、算术运算指令、算术运算指令掌握加法与减法运算对标志位的影响。掌握加法与减法运算对标志位的影响。如何求两个如何求两个8位无符号数的加法(考虑结位无符号数的加法(考虑结果可能超出果可能超出8位)?位)?如何求两个如何求两个8位
34、有符号数的加法(考虑结位有符号数的加法(考虑结果可能超出果可能超出8位)?位)?如何求存放在如何求存放在(DX,AX)中双字数据的相中双字数据的相反数反数?如何实现如何实现(AX) (BX)?如何实现如何实现(AX)5 ? 掌握应用算术指令编写实现表达式计算掌握应用算术指令编写实现表达式计算的汇编源程序。的汇编源程序。531、A,B,C均为均为8位位无符号数无符号数, 求其和送求其和送16位变位变量量SUM中中,要求考虑结果超过要求考虑结果超过255的情况的情况.; (假设假设A,B,C的值分别为的值分别为30H,55H,0A5H)MOV AL, A ; (AL)=30HADD AL, B;(
35、AL)=30H+55H=85H, CF=0ADD AL, C;(AL)=85H+0A5H=2AH, CF=1MOV AH, 0 ;(AH)=0ADC AH, 0;(AH)=(AH)+0+CF=0ADC AH, 0;(AH)=(AH)+0+CF=1MOV SUM, AX ;2AHDS:SUM,01HDS:SUM+1542、P,Q,R均为均为8位位有符号数有符号数,求其和送求其和送TOTAL.要求考虑结果超过要求考虑结果超过-128127的情况的情况MOV AL, P;P(AL)CBW;P符号扩展符号扩展为为16位位(AX)MOV DX, AX;P(DX)MOV AL, Q;Q(AL)CBW;Q符
36、号扩展符号扩展为为16位位(AX)ADD DX, AX;P+Q(DX)MOV AL, R;R(AL)CBW;R符号扩展符号扩展为为16位位(AX)ADD DX, AX;P+Q+R(DX)MOV TOTAL, DX ;保存三个数的和保存三个数的和55习题习题3.1 根据要求写出对应的汇编语言指令根据要求写出对应的汇编语言指令.(1)把把BX和和DX寄存器内容相加,结果存入寄存器内容相加,结果存入DX寄存器。寄存器。ADDDX, BX(2)使用使用BX和和SI寄存器进行基址变址寻址,寄存器进行基址变址寻址,把存储器中一字节内容与把存储器中一字节内容与AL内容相加,结内容相加,结果存入存储单元。果存
37、入存储单元。ADDBXSI, AL56(3)使用使用BX寄存器进行间接寻址,把存储器中一个寄存器进行间接寻址,把存储器中一个字内容与立即数字内容与立即数3相加,结果存入该存储单元的相加,结果存入该存储单元的指令指令 。 (4)用偏移地址用偏移地址1020H直接寻址,把存储单元一个字直接寻址,把存储单元一个字内容与立即数内容与立即数3相加,结果存入存储单元。相加,结果存入存储单元。(5)将将AL寄存器内容与立即数寄存器内容与立即数120相加,结果存入相加,结果存入AL寄存器。寄存器。ADD WORD PTR BX, 3ADD WORD PTR1020H, 3ADDAL, 12057习题习题3.4
38、 (3) Z(W*X)/(Y+6), R余数余数MOVAX, WIMULXMOVBX, YADDBX, 9IDIVBXMOVZ, AXMOVR, DX58习题习题3.5一个双字长有符号数存放在一个双字长有符号数存放在DX(高位)(高位)AX(低位)中,写出求该(低位)中,写出求该数相反数的指令序列。结果仍存入数相反数的指令序列。结果仍存入DX,AX寄存器。寄存器。NOT AXNOT DXADD AX, 1ADC DX, 0或者或者: NEG DX NEG AX SBB DX, 059习题习题3.7 已知内存变量已知内存变量X, Y, Z均由均由“DB”伪操作定义,按伪操作定义,按照以下要求,使
39、用照以下要求,使用MOVZX或或MOVSX指令进行位数指令进行位数扩展,求三个数的扩展,求三个数的16b和。和。(1)如果)如果X,Y,Z为无符号数为无符号数(2)如果)如果X,Y,Z为有符号数为有符号数 (1) MOVZXAX, XMOVZXBX, YADD AX, BXMOVZXBX, ZADD AX, BX(2) MOVSXAX, XMOVSXBX, YADD AX, BXMOVSXBX, ZADD AX, BX60方法:两个方法:两个N位操作数相除,应首先把被位操作数相除,应首先把被除数扩展为除数扩展为2N位;并区分是无符号数还位;并区分是无符号数还是带符号数的除法。是带符号数的除法。
40、(1)均为无符号数均为无符号数MOV DX, 0 ;(AX)零扩展零扩展(DX,AX)DIV BX(2)均为带符号数均为带符号数CWD ;(AX)符号扩展符号扩展(DX,AX)IDIV BX编写指令实现除法编写指令实现除法(AX) (BX).61设设(AX)中为无符号数中为无符号数, 实现实现(AX)5 。MOV BX, 5MOV DX, 0DIV BX62知识点知识点22、掌握用、掌握用LOOP指令实现数据累加及指令实现数据累加及数组处理的程序。数组处理的程序。63实验报告实验报告2: 1、下列程序实现利用公式、下列程序实现利用公式N2=1+3+5+(2N-1)来计算来计算N2的值(的值(N
41、=23)。其中存在)。其中存在3个错误,请修改程序正确。个错误,请修改程序正确。第第1行行 DATASEGMENT第第2行行 N DW 23第第3行行 SQUARE DW ?第第4行行 DATAENDS第第5行行 CODESEGMENT第第6行行 ASSUME CODE:CS, DATA:DS第第7行行 START:MOV AX, DATA第第8行行MOV DS, AX第第9行行MOV CX, 2*N-1第第10行行MOV AX, 0第第11行行MOV BX, 1第第12行行 ONE:ADDAX, BX第第13行行ADDBX, 1第第14行行LOOP ONE第第15行行MOV SQUARE,
42、AX第第16行行MOV AX, 4C00H第第17行行INT21H第第18行行 CODEENDS第第19行行 ENDSTART64答:答: 错误错误1:第:第6行行修改为:修改为:ASSUME CS:CODE, DS: DATA。错误错误2:第:第9行行修改为:修改为: MOV CX, N错误错误3:第:第13行行修改为:修改为:ADD BX, 265实验报告实验报告2: 4、数组、数组ARRAY中存有中存有10个无符号字个无符号字整数整数(元素序号元素序号09)现在要删除其中的第现在要删除其中的第5个元素。个元素。编写程序,把第编写程序,把第69个元素移到第个元素移到第58个元素的位个元素的
43、位置上,并把第置上,并把第9个元素清零。个元素清零。DATA SEGEMNTARRAY DW 1, 9, 21, 2, 7, -9, 5, -7, -23, 6DATA ENDSCODE SEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AX66MOVBX, 10MOVCX, 4AGAIN:MOVAX, ARRAYBX+2MOVARRAYBX, AXADDBX, 2LOOP AGAINMOVARRAYBX, 0MOVAX, 4C00HINT 21HCODE ENDSENDSTART 67知识点知识点33、逻辑运算指令、逻辑运算指令掌握
44、通过逻辑指令实现将一个数的掌握通过逻辑指令实现将一个数的某些位清零、置某些位清零、置1、变反。、变反。掌握如何进行数字字符与相应十进掌握如何进行数字字符与相应十进制数之间的转换?制数之间的转换?掌握将掌握将AX寄存器的内容清零的多种寄存器的内容清零的多种方法。方法。68编写指令将编写指令将AL的第的第0、1两位清零。两位清零。1 0 1 0 0 0 0 0AND AL, 0FCH(AL)= 1 0 1 0 0 0 1 1AND 1 1 1 1 1 1 0 069编写指令将数字字符的编写指令将数字字符的ASCII码转化成对应码转化成对应的十进制数的十进制数. 如如(AL)=7=37H, 转换为转
45、换为(AL)=7. AND AL, 0FH 或者或者 SUB AL, 30H70编写指令将编写指令将AL的第的第5位置为位置为1。OR AL, 20H1 0 1 0 0 0 1 1(AL)= 1 0 0 0 0 0 1 1OR 0 0 1 0 0 0 0 071编写指令将一位十进制数转换成对应数字编写指令将一位十进制数转换成对应数字字符的字符的ASCII码值码值.如如(AL)=7, 转换为转换为(AL)=7. OR AL, 30H 或者或者 ADD AL, 30H72编写指令使编写指令使AL的的0、1位变反。位变反。 XOR AL, 31 0 1 0 0 1 1 0(AL)= 1 0 1 0
46、0 1 0 1XOR 0 0 0 0 0 0 1 173方法方法1: MOV AX, 0 方法方法2:SUB AX, AX 方法方法3:XOR AX, AX方法方法4:AND AX, 0 编写指令将累加器编写指令将累加器AX内容清内容清0。74习题习题3.16 设(设(BX)=0E3H,变量变量VALUE中存放中存放内容为内容为79H,指出下列指令单独执行后的结果指出下列指令单独执行后的结果.(1)XORBX, VALUE(2)ANDBX, VALUE(3)ORBX, VALUE(4)XORBX, 0FFH(5)ANDBX, BX(6)ANDBX, 0(BX)=009AH(BX)=0061H(
47、BX)=00FBH(BX)=001CH(BX)=00E3H(BX)=0000H75知识点知识点44、移位指令、移位指令掌握如何用移位指令实现有符号数掌握如何用移位指令实现有符号数/无符号数的乘无符号数的乘2/除除2操作。操作。掌握如何实现将掌握如何实现将(DX,AX)中双字数中双字数据右移据右移4位(或左移位(或左移4位)。位)。掌握掌握DOS的的1号、号、2号、号、9号、号、0AH号、号、4CH号功能调用。号功能调用。76(1)实现将实现将AX中的无符号数乘以中的无符号数乘以2: SHL AX,1(2)实现将实现将AX中的无符号数除以中的无符号数除以2: SHR AX,1(3)实现将实现将A
48、X中的有符号数乘以中的有符号数乘以2: SAL AX,1(4)实现将实现将AX中的有符号数除以中的有符号数除以2: SAR AX,1773.22 一个双字长数据存放在一个双字长数据存放在DX(高位)和(高位)和AX(低位)中,写出指令序列实现:将该数据逻(低位)中,写出指令序列实现:将该数据逻辑左移辑左移4位,结果仍存入位,结果仍存入DX、AX寄存器寄存器 。MOV CL,04SHL DX,CLMOV BL,AHSHL AX,CL SHR BL,CLOR DL,BL783.23 已知已知(DX)=0B9H, (CL)=3, (CF)=1. (1) SHR DX, 10000 0000 1011
49、 1001 (CF)=10000 0000 0101 1100 (CF)=1(DX)=005CH 0 CF(2) SAR DX, CLCF0000 0000 1011 1001 (CF)=10000 0000 0001 0111 (CF)=0(DX)=0017H 793.23 已知已知(DX)=0B9H, (CL)=3, (CF)=1. (3) SHL DX, CL(CF)=1 0000 0000 1011 1001(CF)=0 0000 0101 1100 1000(DX)=05C8H(4) SHL DL, 1(CF)=1 1011 1001 (CF)=1 0111 0010 (DL)=72
50、H (DX)=0072H CF 0 CF 0803.23 已知已知(DX)=0B9H, (CL)=3, (CF)=1. (5) RORDX, CL 0000 0000 1011 1001 (CF)=10010 0000 0001 0111 (CF)=0(DX)=2017H(6) ROL DX, CL CF (CF)=1 0000 0000 1011 1001(CF)=0 0000 0101 1100 1000(DX)=05C8H CF813.23 已知已知(DX)=0B9H, (CL)=3, (CF)=1. (7) SAL DH, 1 (CF)=1 0000 0000(CF)=0 0010 0