第9章程序设计的一些编程技巧 第9章程序设计的一些编裎技巧 9,1表处理程序设计 9,2代码转换程序 93算术运算 94数值分析 BACK
第9章 程序设计的一些编程技巧 第9章 程序设计的一些编程技巧 9.1 表处理程序设计 9.2 代码转换程序 9.3 算术运算 9.4 数值分析
第9章程序设计的一些编程技巧 91表处理程序设计 911表的处理 表的用途十分广泛:求平方值、立方值需要使用平方值表和 立方值表,程序实现分支要用到跳转表等;大量供各种运算、査 询等用的机器执行的任务,一组组的结果,一系列有关联的数据 等等,都需要使用表来存储或处理。对表的处理通常包括査询、 插入、删除、排序和搜索等几个方面。将一新的内容插入到表中 某个单元以前或以后,这里就需要先将插入位置以后的数据后移, 然后再将数据插入,同时表元素的个数也应做相应的修改(增加); 需要将表中某些内容删除时,为保持表的完整,应将被删内容以 后的数据前移,并修改表元素个数;需要按某种规律(升序或降序) 将表中内容重新排列组织;需要在特定的表中查找给定某元素, 看是不有在此元素,存在何处,并做些其他处理等等
第9章 程序设计的一些编程技巧 9.1 表处理程序设计 9.1.1 表的处理 表的用途十分广泛:求平方值、立方值需要使用平方值表和 立方值表,程序实现分支要用到跳转表等;大量供各种运算、查 询等用的机器执行的任务,一组组的结果,一系列有关联的数据 等等,都需要使用表来存储或处理。对表的处理通常包括查询、 插入、删除、排序和搜索等几个方面。将一新的内容插入到表中 某个单元以前或以后,这里就需要先将插入位置以后的数据后移, 然后再将数据插入,同时表元素的个数也应做相应的修改(增加); 需要将表中某些内容删除时,为保持表的完整,应将被删内容以 后的数据前移,并修改表元素个数;需要按某种规律(升序或降序) 将表中内容重新排列组织;需要在特定的表中查找给定某元素, 看是否存在此元素,存在何处,并做些其他处理等等
第9章程序设计的一些编程技巧 912表处理程序设计 在表处理程序设计中,经常要用到ⅩLA指令,XLAT指令称 为查表转换指令,在3.2.1节数据传送指令中已作过介绍。它是用 表中的一个字节(称为换码字节)来置换累加器AL中的内容,用此 指令以前,要求先把表的起始地址送入BX寄存器,且在AL中置 好所需的初值,AL中的初值为所需的换码字节在表中的相对位 置(用字节数给出),又可称为查找所需换码字节的索引值,然后 XLAT指令将BX内容加上AL内容所形成的地址单元中的内容(即 所需的换码字节)放到AL中去
第9章 程序设计的一些编程技巧 9.1.2 表处理程序设计 在表处理程序设计中,经常要用到XLAT指令,XLAT指令称 为查表转换指令,在3.2.1节数据传送指令中已作过介绍。它是用 表中的一个字节(称为换码字节)来置换累加器AL中的内容,用此 指令以前,要求先把表的起始地址送入BX寄存器,且在AL中置 好所需的初值,AL中的初值为所需的换码字节在表中的相对位 置(用字节数给出),又可称为查找所需换码字节的索引值,然后 XLAT指令将BX内容加上AL内容所形成的地址单元中的内容(即 所需的换码字节)放到AL中去
第9章程序设计的一些编程技巧 1.XLAT指令应用举例 例9-1利用XLAT指令把十六进制数转换成ASCI码 编程的基本思想是通过查表来实现进制的转换 进制转换的方法有很多,这里介绍使用表的方法来实现转 换。XLAT指令是对表进行处理的,因此,要使用XLAT指令, 就必须建立符合要求的表。程序中 HEXTAB是十六进制数表, 而 TAB DA是ASC码表
第9章 程序设计的一些编程技巧 1.XLAT指令应用举例 例9-1 利用XLAT指令把十六进制数转换成ASCII码。 编程的基本思想是通过查表来实现进制的转换。 进制转换的方法有很多,这里介绍使用表的方法来实现转 换。XLAT指令是对表进行处理的,因此,要使用XLAT指令, 就必须建立符合要求的表。程序中HEXTAB是十六进制数表, 而TAB_DA是ASCII码表
第9章程序设计的一些编程技巧 TABLE SEGMENT TAB DA DB30H,31H,32H,33H DB34H,35H,36H,37H DB38H,39H,41H,42H DB42H,43H,44H,45H,46H COUNT EQU S-TAB DA HEXTAB DB 0,1, 2, 3, 4,5 DB6,7,8,9,0AH DB OBH, OCH, ODH, OEH, OFH
第9章 程序设计的一些编程技巧 TABLE SEGMENT TAB_DA DB 30H,31H,32H,33H DB 34H,35H,36H,37H DB 38H,39H,41H,42H DB 42H,43H,44H,45H,46H COUNT EQU $-TAB_DA HEXTAB DB 0,1,2,3,4,5 DB 6,7,8,9,0AH DB 0BH,0CH,0DH,0EH,0FH
第9章程序设计的一些编程技巧 ASIBUF DB 16 DUP(?) TABLE ENDS STACK SEGMENT PARA STACK STACK STAPN DB 100 DUP(? STACK ENDS COSEG SEGMENT aSSUMe CS: coseg, ds: DATA assume eS: TABLE, ss: STACK STR PROC FAR
第9章 程序设计的一些编程技巧 ASIBUF DB 16 DUP(?) TABLE ENDS STACK SEGMENT PARA STACK 'STACK' STAPN DB 100 DUP(?) STACK ENDS COSEG SEGMENT ASSUME CS∶COSEG,DS∶DATA ASSUME ES∶TABLE,SS∶STACK STR PROC FAR
第9章程序设计的一些编程技巧 START PUSH DS MOV AX, 0 PUSH AX MOV AX, TABLE MOV ES, AX MOV DS, AX MOV BX, OFFSET TAB DA MOV SI, OFFSET HEXTAB MOV DI, OFFSET ASIBUF MOV CX, COUNT
第9章 程序设计的一些编程技巧 START PUSH DS MOV AX,0 PUSH AX MOV AX, TABLE MOV ES,AX MOV DS,AX MOV BX,OFFSET TAB_DA MOV SI,OFFSET HEXTAB MOV DI,OFFSET ASIBUF MOV CX,COUNT
第9章程序设计的一些编程技巧 NEST LODSB XLAT TAB DA STOSB LOOP NEST RET STR ENDP COSEG ENDS END START
第9章 程序设计的一些编程技巧 NEST: LODSB XLAT TAB_DA STOSB LOOP NEST RET STR ENDP COSEG ENDS END START
第9章程序设计的一些编程技巧 例9-2数据或程序的加密和解密。 为了使数据能够保密,可以建立一个密码表,利用XLAT 指令将数据加密。程序接收键入的一个数字,如果是0~9之间 的一个数,加密后存入MMA单元。密码表可选择为 原数字:0,1,2,3,4,5,6,7,8,9 密码数字:7,5,9,1,3,6,8,0,2,4
第9章 程序设计的一些编程技巧 例9-2 数据或程序的加密和解密。 为了使数据能够保密,可以建立一个密码表,利用XLAT 指令将数据加密。程序接收键入的一个数字,如果是0~9之间 的一个数,加密后存入MIMA单元。密码表可选择为 原数字: 0,1,2,3,4,5,6,7,8,9 密码数字: 7,5,9,1,3,6,8,0,2,4
第9章程序设计的一些编程技巧 加密程序描述如下: DATA SEGMENT MITAB DB7591368024;加密密码表 CONT EQU $-MITAB JMITAB DE17384915062;解密密码表 MIMA DB o DATA ENDS CODE SEGMENT assUMe cS: CODe, ds: DATA STAR PROC FAR PUSH DS MOV AX,0
第9章 程序设计的一些编程技巧 加密程序描述如下: DATA SEGMENT MITAB DB '7591368024' ;加密密码表 CONT EQU $-MITAB JMITAB DB '7384915062' ;解密密码表 MIMA DB ? DATA ENDS CODE SEGMENT ASSUME CS∶CODE,DS∶DATA STAR PROC FAR PUSH DS MOV AX,0