44
1 http://qsyang.yeah.n http://qsyang.yeah.n 现现现现现现现现现现现 现现现现现现现现现现现 1 数数数数数数数 数数数数 / 数数数数数数 2 数数数数数数 数数数 数数数数 数数数数 、、、 数数数 数数数 3 数数数数数数数 ASCII 数 BCD 数 数数数 BCD 数 4 数数数数 数数 数数数 数数数数数数数数数数数数数数数数数数数数数数数数 数数数数数数数 一,, 数数 数数数 数数数数数数数数数数数数数数数数数数数数数数数数 数数数数数数数 一,, 1 1 1 1 数数数数数数数数数数数数数数数数数数数数数数数数数数 数数数数数数数数数数数数 ( ( 数数 数数 ) )

汇编语言在数据处理中应用 ( 自学 )

  • Upload
    renate

  • View
    141

  • Download
    0

Embed Size (px)

DESCRIPTION

汇编语言在数据处理中应用 ( 自学 ). 1 、数值转换中应用 数据输入 / 输出时的转换 2 、串操作中应用 串移动、串搜索、串比较、 串插入、串删除 3 、代码转换中应用 ASCII 码 BCD 码 二进数 BCD 码 4 、算术运算. 在这一部分,我们将汇编语言在数据处理中的应用集中起来给大家,其中有些程序在 11 章中已经介绍过。. - PowerPoint PPT Presentation

Citation preview

Page 1: 汇编语言在数据处理中应用 ( 自学 )

1 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

1 、数值转换中应用 数据输入 / 输出时的转换2 、串操作中应用 串移动、串搜索、串比较、 串插入、串删除3 、代码转换中应用 ASCII 码 BCD 码 二进数 BCD 码 4 、算术运算

在这一部分,我们将汇编语言在数据处理中的应用集在这一部分,我们将汇编语言在数据处理中的应用集中起来给大家,其中有些程序在中起来给大家,其中有些程序在 1111 章中已经介绍过。章中已经介绍过。

汇编语言在数据处理中应用汇编语言在数据处理中应用 (( 自学自学 ))

Page 2: 汇编语言在数据处理中应用 ( 自学 )

2 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术ASCII 码输入设备

ASCII 码表示的十进制二进制

ASCII 码表示的十六进制二进制

ASCII 码表示的二进制二进制

机内二进制操作运算

二进制 ASCII 码表示的十进制

二进制 ASCII 码表示的十六进制

二进制 ASCII 码表示的二进制

ASCII 码输出设备

Page 3: 汇编语言在数据处理中应用 ( 自学 )

3 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

ASCIIASCII 码十进制转换为二进制数码十进制转换为二进制数

设 5 位十进数从高位到低位依次是 d4 、 d3 、 d2 、 d1 、 d0 。可用下列多项式进行计算: ((((0*10+d4)*10+d3)*10+d2)*10+d1)*10+d0

初始化

是 0--9

ASCII 码 -30H

累加器 *10

累加器 + 这一位值

修改指令

结束

N

Y

汇编语言在数值转换中的应用汇编语言在数值转换中的应用

Page 4: 汇编语言在数据处理中应用 ( 自学 )

4 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术 CHG_DEC_BIN PROC ; SI SI 指向十进制缓冲区首址指向十进制缓冲区首址

MOV DX, 0 ;初始化MOV CX, 10

GET_ASC: MOV AL, [SI] ;取得十进制数CMP AL, ‘0’JB EXITCMP AL, ‘9’JA EXIT

DEC_BIN: SUB AL, 30HMOV AH, 0PUSH AXPUSH AXMOV AX, DXMUL CX ; *10MOV DX, AXPOP AXPOP AXADD DX, AXINC SI ;修改指针JMP GET_ASC

EXIT: RET ; 转换后的二进数在转换后的二进数在 DXDX 中中 CHG_DEC_BIN ENDP

Page 5: 汇编语言在数据处理中应用 ( 自学 )

5 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术二进制数转换为 二进制数转换为 ASCIIASCII 码十进码十进制制

Page 6: 汇编语言在数据处理中应用 ( 自学 )

6 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术BIN_TO_DEC PROC ;被转换的十进数在被转换的十进数在 AXAX 中中

PUSH DI ; DI DI 指向存放十进数缓冲区首址指向存放十进数缓冲区首址MOV CX, 5 ;初始化

CLEAR_BUF: MOV BYTE PTR[DI], ‘ ‘INC DILOOP CLEAR_BUFDEC DIMOV CX, 10

CHANGE: MOV DX, 0MOV DX, 0 ;转换;转换DIV CX DIV CX ;除以;除以 1010 ,余数在,余数在 DXDXADD DL, 30HADD DL, 30H ;; ASCIIASCII 码码MOV BYTE PTR[DI], DLMOV BYTE PTR[DI], DL ;存储十进制数;存储十进制数DEC DIDEC DICMP AX, 0 CMP AX, 0 商是否为商是否为 00 ??JNZ CHANGEJNZ CHANGEPOP DIRET

BIN_TO_DEC ENDP

Page 7: 汇编语言在数据处理中应用 ( 自学 )

7 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术ASCIIASCII 码十六进制数转换为二进制数码十六进制数转换为二进制数 十六进制数的字符为 0~9 和 A~F ,输入后, ASCII 码为 30H~39H 和 41H~46H 转换时,若是数字若是数字 0~90~9 ,减,减 30H30H 若是若是 A~FA~F ,减去,减去 37H37H HEX_TO_BIN PROC

PUSH AX PUSH CX MOV DX, 0 ;转换后结果在转换后结果在 DXDX 中中

GET_CHAR: MOV AX, 01H ;键盘输入 INT 21H SUB AL,30H JL EXIT CMP AL, 0AH JL CHANGE

SUB AL, 07H

Page 8: 汇编语言在数据处理中应用 ( 自学 )

8 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术CMP AL, 0AH ;是否是大写字母JL EXITCMP AL, 0FHJLE CHANGECMP AL, 2AH ;是否是小写字母JL EXITCMP AL, 2FHJLE CHANGEJMP EXIT

CHANGE:CHANGE: MOV CL, 4MOV CL, 4 ;转换;转换SHL DX, CLSHL DX, CLMOV AH, 0MOV AH, 0ADD DX, AXADD DX, AXJMP GET_CHARJMP GET_CHARPOP CXPOP AX

EXIT: RET HEX_TO_BIN ENDP

Page 9: 汇编语言在数据处理中应用 ( 自学 )

9 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

串移动(数据块移动)串移动(数据块移动) 串搜索串搜索 串比较串比较 串插入串插入 串删除串删除 求串长求串长

汇编语言在串操作中的应用汇编语言在串操作中的应用

Page 10: 汇编语言在数据处理中应用 ( 自学 )

10 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术 数据块移动数据块移动 1 、一般情况 S1 S2

源区 目的区

2 、特殊情况:源区与目的区重叠源区与目的区重叠

源区 目的区

目的区 源区

Page 11: 汇编语言在数据处理中应用 ( 自学 )

11 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

串搜索例串搜索例 将串 STR 中第一个‘ I’ 字符找出,并显示其在串中的位移量

D_SEG SEGMENTSTR DB ‘THIS IS A COMPUTER’STR_LEN = $-STRD_SEG ENDS......

LEA DI, STRMOV CX, STR_LENMOV AL, ’I’CLD

FOUND: REPNZ SCASBREPNZ SCASBJE OK1JCXZ RETN

OK1:OK1: MOV DX, DIMOV DX, DIDEC DLDEC DL ;第一个;第一个 'I''I' 字符距串头位移量字符距串头位移量MOV BL, DLMOV BL, DL

Page 12: 汇编语言在数据处理中应用 ( 自学 )

12 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术PUSH CXMOV CL,4SHR DL, CLPOP CXCMP DL, 0AHJB OK2ADD DL, 7

OK2: ADD DL, 30HMOV AH, 02HINT 21H ;显示位移量高位MOV DL, BLAND DL, 0FHCMP DL, 0AHJB OK3

0K3: ADD DL, 30HMOV AH, 02HINT 21H ;显示位移量低位MOV DL, 'H'INT 21H

RETN: ......

Page 13: 汇编语言在数据处理中应用 ( 自学 )

13 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术串比较例 串比较例 比较串 STR1 和 STR2 是否相等 D_SEG SEGMENT

STR1 DB 'STRING1'STR2 DB 'STRING2'STR_LEN = ($-STR1)/2MSG1 DB 'NOT EQUAL','$'MSG2 DB 'EQUAL','$'

D_SEG ENDS......

LEA SI, STR1MOV DI, OFFSET STR2MOV CX, STR_LENCLD

Page 14: 汇编语言在数据处理中应用 ( 自学 )

14 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

REPE CMPSBREPE CMPSBJNZ NO_EQUA

EQUA: MOV AH, 09HLEA DX, MSG2INT 21H ;提示两个串相等JMP CMP_END

NO_EQUA: MOV AH, 09HLEA DX, MSG1INT 21H ;提示两个串不等......

CMP_END:......

Page 15: 汇编语言在数据处理中应用 ( 自学 )

15 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术串插入串插入串插入分三种情况: 1 、在目的串首插入 2 、在目的串尾插入 3 、在目的串中指定的位置插入串插入例串插入例 将正数 N 插入一个升序的字数组中, 数组的首地址和末地址为 A_HEAD 和 A_END X 3 A_HEAD X DW ? 5 A_HEAD DW 3,5,23,49,52,65 23 A_END DW 105 49 N DW 32 52 65 105 A_END 32 N

Page 16: 汇编语言在数据处理中应用 ( 自学 )

16 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术 MOV AX, N MOV A_HEAD-2, -1MOV A_HEAD-2, -1 MOV SI, 0 COMPARE:CMP A_END[SI], AX ;从最后一个元素开始比较;从最后一个元素开始比较 JLE INSERT MOV BX, A_END[SI] MOV A_END[SI+2], BX ;元素后移一个位置;元素后移一个位置 SUB SI, 2 JMP COMPARE INSERT: MOV A_END[SI+2], AX ;插入;插入 .....

Page 17: 汇编语言在数据处理中应用 ( 自学 )

17 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术串删除串删除 串删除例串删除例 附加段中有一个首地址为 LIST 的字数组,数组的第一字中存放该数组长度,数组首地址在 DI 中,数 X 在 AX 中,现要在数组中查找 X ,若找到则删除。

Page 18: 汇编语言在数据处理中应用 ( 自学 )

18 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术 CLD

PUSH DI MOV CX, ES:[DI] ;数组长度送 CX ADD DI, 2 ; DI 指向第一个元素 REPNE SCASWREPNE SCASW ;串扫描 JE DELETE ;如找到则删除 POP DI ;否则,退出 JMP EXIT

DELET: JCXZ DEC_CNTJCXZ DEC_CNT ;若 CX=0 , X 为最后一个元素NEXT_EL: MOV BX, ES:[DI]

MOV ES:[DI-2], BX ;元素向前移动一个位置元素向前移动一个位置 ADD DI, 2 LOOP NEXT_EL

DEC_CNT: POP DI DEC WORD PTR ES:[DI] ;数组元素个数减数组元素个数减 11

EXIT: ......

Page 19: 汇编语言在数据处理中应用 ( 自学 )

19 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术 求串长求串长求串长例求串长例 求字符串的长度送入 LEN ,假定串以‘ $’ 结束 STRING DB ‘Hello,How are you!’,’$’ ……. MOV SI, OFFSET STRING XOR BL, BLLOP: MOV AL, [SI] CMP AL,’$’CMP AL,’$’ JZ DONE INC BL INC SI JMP LOPDONE: MOV LEN, BL

Page 20: 汇编语言在数据处理中应用 ( 自学 )

20 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

11 、十进制、十进制 ASCII ASCII 码转换成码转换成 BCDBCD 码码

22 、、 BCDBCD 码转换成十进制数的码转换成十进制数的 ASCIIASCII 码码

33 、二进制数转换为、二进制数转换为 BCDBCD 码码

44 、、 BCDBCD 码转换为二进制数码转换为二进制数

汇编语言在代码转换中的应用汇编语言在代码转换中的应用

Page 21: 汇编语言在数据处理中应用 ( 自学 )

21 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术十进制十进制 ASCII ASCII 码转换成码转换成 BCDBCD 码例码例 令 ASC_BUF 开始的缓冲区内存放着若干个 ASCII 码表示 ASC_BUF 31H 的十进制数, ( 每个单元存放一 32H个十进制数 ) ,要求将其转换成 33HBCD 码,并把两个相邻单元的 34HBCD 码合并在一个存储单元中 35H 若 ASCII 码的个数为奇数,则将首地址单元的十进制数对 应的 BCD 码单独存放一个单元 , BCD_BUF 1其余的按统一方法处理 32 子程序名: DEC_ASC_BCD 54入口参数:入口参数: DS:SIDS:SI 指向指向 ASCIIASCII 码首地址码首地址 ASC_BUFASC_BUF ES:DIES:DI 指向指向 BCDBCD 码首地址码首地址 BCD_BUFBCD_BUF CX=CX= 串长度串长度 , DS,ES, DS,ES 指向同一个段指向同一个段 出口参数:出口参数: BCDBCD 码存放在码存放在 BCD_BUFBCD_BUF 为首地址的缓冲区内 为首地址的缓冲区内

Page 22: 汇编语言在数据处理中应用 ( 自学 )

22 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术DEC_ASC_BCD PROC FAR PUSH SI ;保护现场 PUSH DI PUSH AX PUSH BX PUSH CX ROR CX, 1ROR CX, 1 JNC NEXTJNC NEXT ; ASCII 码为偶数个转移 ROL CXROL CX LODSB LODSB ;取;取 ASCIIASCII 码到码到 ALAL AND AL, 0FH AND AL, 0FH ;; ASCIIASCII 码转换成码转换成 BCDBCD 码码 STOSB STOSB ;存储;存储 BCDBCD 码码 DEC CXDEC CX ROR CX,1 ROR CX,1 ;奇数个时单独处理完;奇数个时单独处理完

Page 23: 汇编语言在数据处理中应用 ( 自学 )

23 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术 NEXT: LODSBNEXT: LODSB AND AL, 0FHAND AL, 0FH MOV BL, AL MOV BL, AL LODSBLODSB PUSH CXPUSH CX MOV CL, 4MOV CL, 4 SAL AL, CLSAL AL, CL POP CXPOP CX ADD AL, BL ADD AL, BL ;合并;合并 BCDBCD 码码 STOSB STOSB ;存储;存储 BCDBCD 码码 LOOP NEXTLOOP NEXT POP CX ;恢复现场 POP BX POP AX POP DI POP SI RET DEC_ASC_BCD ENDP

Page 24: 汇编语言在数据处理中应用 ( 自学 )

24 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

BCDBCD 码转换成十进制数的码转换成十进制数的 ASCIIASCII 码例码例 将数据段字节变量 BCD_BUF 为首地址的缓冲区中一个八位十进制数对应的压缩 BCD 码转换成 ASCII 码,并显示 BCD_BUF 12 34 56 78 显示: 7 8 5 6 3 4 1 2

子程序名: BCD_DEC_ASC 入口参数:一个八位十进制数对应的压缩入口参数:一个八位十进制数对应的压缩 BCDBCD 码存储码存储 在在 BCD_BUFBCD_BUF 缓冲区缓冲区 出口参数: 正常结束,出口参数: 正常结束, DH=0FFHDH=0FFH

Page 25: 汇编语言在数据处理中应用 ( 自学 )

25 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术BCD_DEC_ASC PROC NEAR PUSH SI ;保护现场 PUSH AX PUSH CX MOV CX, 4 LEA SI, BCD_BUF ADD SI, 3ADD SI, 3 MOV DH, 0 CHG_OUT1: PUSH CX MOV AL, [SI] MOV AL, [SI] ;取压缩;取压缩 BCDBCD 码码 DEC SI DEC SI ;修改指针;修改指针 MOV DL, ALMOV DL, AL MOV CL, 4MOV CL, 4 ROR AL, 4ROR AL, 4 AND AL, 0FH AND AL, 0FH ;取高半字节;取高半字节 BCDBCD 码码 ADD AL, 30H ADD AL, 30H ;生成;生成 ASCIIASCII 码码 CALL STD_OUT ;标准设备输出

Page 26: 汇编语言在数据处理中应用 ( 自学 )

26 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术 CHG_OUT2: POP CX CMP CX, 1 JNZ CHG_OUT3 MOV DH, 0FFH CHG_OUT3: PUSH CX MOV AL, DLMOV AL, DL AND AL, 0FH AND AL, 0FH ;取低半字节;取低半字节 BCDBCD 码码 ADD AL, 30H ADD AL, 30H ;生成;生成 ASCIIASCII 码码 CALL STD_OUT ;标准设备输出 CHG_OUT4: POP CX LOOP CHG_OUT1 POP CX POP AX POP SI RET BCD_DEC_ASC ENDP

Page 27: 汇编语言在数据处理中应用 ( 自学 )

27 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术STD_OUT PROC NEAR ;标准设备输出 PUSH DX PUSH AX MOV DL, AL MOV AH, 2 INT 21H POP AX POP DX RET STD_OUT ENDP

Page 28: 汇编语言在数据处理中应用 ( 自学 )

28 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术二进制数转换为二进制数转换为 BCDBCD 码例码例 DX 寄存器中为一个十六位无符号二进制数 (0-65535), 将其转换为压缩的 BCD 码 , 保存在 BCD_BUF 缓冲区 DX BCD_BUFBIN_TO_BCD PROC FAR 15678 78 PUSH AX 56 PUSH CX 1 PUSH DX 0 PUSH DI 0 LEA DI, BCD_BUF MOV AL, 0 MOV CX, 5CLEAR_BUF: MOV [DI], AL ;初始化缓冲区 INC DI LOOP CLEAR_BUF LEA DI, BCD_BUF

Page 29: 汇编语言在数据处理中应用 ( 自学 )

29 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术 CHG_BCD1: MOV AX, DX ;转换开始 MOV DX,0 MOV CX,10 DIV CX XCHG AX, DX ;交换余数和商 MOV BL, AL ;余数送 AL MOV AX, DX MOV DX, 0 MOV CX, 10 DIV CX XCHG AX, DX MOV CL, 4 ROL AL, CL AND AL, 0F0H OR AL, BL ;组合 BCD 码 MOV [DI], AL ;存储 BCD 码 INC DI CMP DX, 0 JNZ CHG_BCD1 POP DI ……

Page 30: 汇编语言在数据处理中应用 ( 自学 )

30 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术BCDBCD 码转换为二进制数例码转换为二进制数例 将 AX 寄存器中的四位压缩型 BCD 码转换为二进制数 BCD_TO_BIN PROC PUSH CX PUSH SI PUSH DI MOV SI, AX XOR AX, AX MOV CX, 4 AGAIN1: MOV DI, 0 PUSH CX MOV CX, 4 AGAIN2: SHL SI, 1 SHL SI, 1 ;左移;左移 11 位,最高位位,最高位 -->CF-->CF RCL DI, 1 RCL DI, 1 ;; CFCF 移入移入 DIDI 中中 LOOP AGAIN2 LOOP AGAIN2 ;重复;重复 44 次得到次得到 11 位位 BCDBCD 码码

Page 31: 汇编语言在数据处理中应用 ( 自学 )

31 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

MOV CX,10 MUL CX ;乘 10 ADD AX, DI POP CX LOOP AGAIN1 MOV DX, AX ;转换后的二进数在 DX 中 POP DI POP SI POP CX RET BCD_TO_BIN ENDP

Page 32: 汇编语言在数据处理中应用 ( 自学 )

32 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术多精度加法运算多精度加法运算 例如,两个无符号四字节二进数相加: 3 4 6 B 7 F 7 A H + 2A BC 8 5 4 8 H 5 F 2 8 0 4 C 2 H 计算步骤为: 第一步 第二步 7 A F 7 4 8 8 5 ADC 0 ADC 0 C 2 (CF=0) 0 4 (CF=1)

第三步 第四步 6 B 3 4 B C 2 A ADC 1 ADC 1 2 8 (CF=1) 5 F (CF=0)

算术运算算术运算

Page 33: 汇编语言在数据处理中应用 ( 自学 )

33 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术ADR1 DB 7AH, 7FH, 6BH, 34HADR2 DB 48H, 85H, 0BCH, 2AHSUM DB 0, 0, 0, 0 …… MOV SI, OFFSET ADR1 MOV BX, OFFSET ADR2 MOV DI, OFFSET SUM MOV CL, 4 CLC ; CF<--0 AGAIN: MOV AL, [SI] ADC AL, [BX] ;字节加 MOV [DI], AL INC SI ;修改地址 INC BX INC DI LOOP AGAIN

Page 34: 汇编语言在数据处理中应用 ( 自学 )

34 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术 设在单元 A 、 B 和 C 存放有三个数,若三个数都不为 0 ,则求出三个数之和存入 D 中;若有一个为 0 ,则将其他两个单元也清 0 。

MOV AX, ACMP AX, 0JZ P1JZ P1MOV AX, BCMP AX, 0JZ P1JZ P1MOV AX, CCMP AX, 0JZ P1JZ P1ADD AX, A

ADC AX, B MOV D, AX JMP DONEJMP DONEP1: MOV A, 0 MOV B, 0 MOV C, 0DONE: ….

Page 35: 汇编语言在数据处理中应用 ( 自学 )

35 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术数据区 DATA1 和 DATA2 分别存放 N 个字节数据,检查它们的数据是否相同。若完全一致,则将 FLAG 置 FFH ,否则置 0 ,并将第一次出现的不同数据的地址分别存入 D1 和 D2 中。

(1) 用一般比较指令 CMP实现 LEA SI, DATA1 LEA DI, DATA2 MOV CX, NM2: MOV AL, [SI] CMP AL, [DI] JNZ M1 INC SI INC DI LOOP M2

MOV FLAG, 0FFHMOV FLAG, 0FFH JMP DONEJMP DONEM1: MOV FLAG, 0MOV FLAG, 0 MOV D1, SI MOV D2, DIDONE: ……

Page 36: 汇编语言在数据处理中应用 ( 自学 )

36 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术( 2 )用串操作指令 CMPS实现

LEA SI, DATA1 LEA DI, DATA2 MOV CX, N CLD REPZ CMPSB JNZ M3JNZ M3 MOV FLAG, 0FFHMOV FLAG, 0FFH JMP DONEJMP DONEM3: MOV FLAG, 0MOV FLAG, 0 DEC SI DEC DI MOV D1, SI MOV D2, DIDONE: ……

Page 37: 汇编语言在数据处理中应用 ( 自学 )

37 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

1 、利用高档机 32 位字长特性有两个 4 字长数分别存放在 DATA1 和 DATA2 中,求它们的和,结果存放于 DATA3 中。

DATA1 DQ 123456789ABCDEFHDATA2 DQ 0FEDCBA987654321HDATA3 DQ ?

在实模式下发挥在实模式下发挥 8038680386及其后继机的优及其后继机的优势势

Page 38: 汇编语言在数据处理中应用 ( 自学 )

38 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

CLC LEA SI, DATA1 LEA DI, DATA2 LEA BX, DATA3 MOV CX, 4MOV CX, 4BACK: MOV AX, [SI]MOV AX, [SI] ADC AX, [DI]ADC AX, [DI] MOV [BX], AXMOV [BX], AX

8086 中实现 :

INC SIINC SI INC SIINC SI INC DIINC DI INC DIINC DI INC BXINC BX INC BXINC BX LOOP BACKLOOP BACK

Page 39: 汇编语言在数据处理中应用 ( 自学 )

39 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术386及其后继机中实现:

CLC LEA SI, DATA1 LEA DI, DATA2 LEA BX, DATA3 MOV CX, 2MOV CX, 2BACK: MOV EAX, [SI] ADC EAX, [DI] MOV [BX], EAX PUSHF PUSHF ;保存;保存 CCFF ADD SI, 4ADD SI, 4 ADD DI, 4ADD DI, 4 ADD BX, 4ADD BX, 4 POPFPOPF LOOP BACK

Page 40: 汇编语言在数据处理中应用 ( 自学 )

40 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

386及其后继机中实现:MOV EAX, DWORD PTR DATA1MOV EAX, DWORD PTR DATA1ADD EAX, DWORD PTR DATA2ADD EAX, DWORD PTR DATA2MOV EDX, DWORD PTR DATA+4ADC EDX, DWORD PTR DATA2+4MOV DWORD PTR DATA3, EAXMOV DWORD PTR DATA3, EAXMOV DWORD PTR DATA3+4, EDXMOV DWORD PTR DATA3+4, EDX

Page 41: 汇编语言在数据处理中应用 ( 自学 )

41 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

2 、通用寄存器可作为指针寄存器使用使用 3232 位寻址时,位寻址时, 3232 位通用寄存器可作为基址位通用寄存器可作为基址或变址寄存器使用或变址寄存器使用例: MOV EAX, [BX] MOV EAX, [EDX] MOV AX, WORD PTR [ECX] MOV AX, [EBX][EBX]

注意:注意: 实模式下,段的大小限制于实模式下,段的大小限制于 64KB64KB ,, 3232 位通用位通用寄存器作为指针寄存器时,高寄存器作为指针寄存器时,高 1616 位应为位应为 00

Page 42: 汇编语言在数据处理中应用 ( 自学 )

42 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术3 、与比例因子有关的寻址方式把 5 个双字相加并保存结果

ARRAY DD 234556H,0F983F5H,6754AE2H, 0C5231239H,0AF34ACB4HRESULT DQ ? SUB EBX, EBX MOV EDX, EBX MOV EAX, EBX MOV CX, 5BACK: ADD EAX, ARRAY[EBX*4]ADD EAX, ARRAY[EBX*4] ADC EDX, 0ADC EDX, 0 INC EBXINC EBX DEC CXDEC CX JNZ BACKJNZ BACK MOV DWORD PTR RESULT, EAX MOV DWORD PTR RESULT+4, EDX

Page 43: 汇编语言在数据处理中应用 ( 自学 )

43 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术数据段中有一个 20 个字节的表和一个 20 个字的表,把字节表中每个数据作为表中的高位字节部分移入字表中。

XOR SI, SI XOR DI, DINEXT: MOV AX, WORD_TABLE[DI]MOV AX, WORD_TABLE[DI] MOV AH, BYTE_TABLE[SI]MOV AH, BYTE_TABLE[SI] MOV WORD_TABLE[DI], AXMOV WORD_TABLE[DI], AX INC SI ADD DI, 2 CMP SI, 20 JL NEXT

BYTE_TABLE DB 20 DUP(?)WORD_TABLE DW 20 DUP(?)

方法方法 11 :用一般寻址方式:用一般寻址方式

Page 44: 汇编语言在数据处理中应用 ( 自学 )

44 http://qsyang.yeah.nethttp://qsyang.yeah.net

现代微机原理与接口技术现代微机原理与接口技术

XOR ESI, ESINEXT: MOV AX, WORD_TABLE[ESI*2]MOV AX, WORD_TABLE[ESI*2] MOV AH, BYTE_TABLE[ESI]MOV AH, BYTE_TABLE[ESI] MOV WORD_TABLE[ESI*2], AXMOV WORD_TABLE[ESI*2], AX INC ESI CMP ESI, 20 JL NEXT

方法方法 22 :用比例变址寻址方式:用比例变址寻址方式