29
1 二二二二 BCD 二二二 DATA SEGMENT BNUM DW 270FH ASTR DB 5DUP (?) DATA ENDS CODE SEGMENT ASSUME CS CODE… START PROC FAR BEGIN: MOV AX BNUM LEA BX ASTR MOV DL 0 AGA1 SUB AX 2710H JS NEXT1 INC DL JMP AGA1 NEXT1 ADD AX 2710H ADD DL 30H MOV [BX] DL INC BX MOV DL 0 AGA2 SUB AX 03E8H JS NEXT2 INC DL JMP AGA2 NEXT2 ADD AX 03E8H ADD DL 30H MOV [BX] DL INC BX MOV DL 0 AGA3 SUB AX 0064H JS NEXT3 INC DL JMP AGA3 NEXT3 ADD AX 0064H

二进制到 BCD 的转换

  • Upload
    xaria

  • View
    215

  • Download
    0

Embed Size (px)

DESCRIPTION

DATA SEGMENT BNUM DW 270FH ASTR DB 5DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE… START PROC FAR BEGIN: … MOV AX,BNUM LEA BX,ASTR MOV DL,0 AGA1:SUB AX,2710H JS NEXT1 INC DL - PowerPoint PPT Presentation

Citation preview

Page 1: 二进制到 BCD 的转换

1

二进制到 BCD 的转换DATA SEGMENTBNUM DW 270FHASTR DB 5DUP (?)DATA ENDSCODE SEGMENT ASSUME CS : CODE…START PROC FARBEGIN: … MOV AX , BNUM LEA BX , ASTR MOV DL , 0AGA1 : SUB AX , 2710H JS NEXT1 INC DL JMP AGA1NEXT1 : ADD AX , 2710H ADD DL , 30H

MOV [BX] , DL INC BX MOV DL , 0AGA2 : SUB AX , 03E8H JS NEXT2 INC DL JMP AGA2NEXT2 : ADD AX , 03E8H ADD DL , 30H MOV [BX] , DL INC BX MOV DL , 0AGA3 : SUB AX , 0064H JS NEXT3 INC DL JMP AGA3NEXT3 : ADD AX , 0064H

Page 2: 二进制到 BCD 的转换

2

接上 ADD DL , 30H

MOV [BX] , DL

INC BX

MOV DL , 0

AGA4 : SUB AX , 000AH

JS NEXT4

INC DL

JMP AGA4

NEXT4 : ADD AX , 000AH

ADD DL , 30H

MOV [BX] , DL

INC BX

ADD AL , 30H

MOV [BX] , DL

RET

START ENDP

CODE ENDS

END BEGIN

Page 3: 二进制到 BCD 的转换

3

从二进制到 ASCII 串的转换设串 1 地址指针,设串长度

修改地址指针

N

Y

取要转换的数

C=1 ?

左移 1 位 返回

存入‘ 1’

用‘ 0’ 填满串 完成否?

Y

N

Page 4: 二进制到 BCD 的转换

4

有关列和表的程序设计1 、加 1 个项至 1 个无序列例 3-19 缓冲区中有一无序列,列的长度放

在缓冲区的第 1 个字节,要把内存某单元的 1 项加入到此列中。

DATA SEGMENTBUF DB 10 ’, abcdefghij’ DB ?KEY DB ‘$’DATA ENDSCODE SEGMENT ASSUME CS : COED…START PROC FARBEGIN: PUSH DS…… LEA DI , BUF MOV CH , 0

MOV CL , [DI]

INC DI

MOV AL , KEY

REPNZ SCASB

JE DONA

MOV [DI] , AL

INC BUF

DONE : RET

START ENDP

CODE ENDS

END BEGIN

Page 5: 二进制到 BCD 的转换

5

从一个无序列中删去一个元素例 3-20在内存缓冲区中有一个无序列,列

的长度存放在第 1 个字节,另有一单元存放要删去的元素变量,查找此无序列,若包含要删去的元素则把它删去,并对列做相应的调整。

DATA SEGMENTBUF DB 10 ’, abcdefghij’KEY DB ‘f’DATA ENDSCODE SEGMENT ASSUME CS : CODE,…START PROC FARBEGIN: …. LEA DI , BUF MOV CH , 0 MOV CL , [DI]

INC DI

MOV AL , KEY

REPNE SCASB

JNE DONE

DEC BUF

SCHG SI , DI

REP MOVSB

DONE : RET

START ENDP

CODE ENDS

END BEGIN

Page 6: 二进制到 BCD 的转换

6

3、找出无序列中的最大值和最小值例:有一无序列,列的长度放在第 1 字

节。DATA SEGMENTBUF DB 10 , 22 , -12…MIN DB ?MAX DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,…START PROC FARBEGIN: … LEA BX , BUF MOV CH , 0 MOV CL , [BX] INC BX MOV AL , [BX]

DEC CX MOV MIN , AL MOV MAX , AL INC BX DEC CXAGAIN : MOV AL , [BX] CMP AL , MIN JE NEXT JG A1 MOV MIN , AL JMP NEXTA1 : CMP AL , MAX JL NEXT MOV MAX , ALNEXT : INC BX DEC CX JNE AGAIN RET….

Page 7: 二进制到 BCD 的转换

7

阅读程序DATA SEGMENTA DW 23,34…..DATA ENDSPROG SEGMENTMAIN PROC FAR ASSUME CS:PROG …,START …: .. MOV CX , N DEC CXLOOP1 : MOV DI , CX MOV BX , 0LOOP2 : MOV AX , A[BX] CMP AX , A[BX+2] JGE COTI XCHG AX , A[BX+2] MOV A[BX] , AX

COTI : ADD BX , 2

LOOP LOOP2

MOV CX , DI

LOOP LOOP1

RET

MAIN ENDP

PROG ENDS

END START

Page 8: 二进制到 BCD 的转换

8

串操作指令流程

取源串地址

取目标串地址

设串长度

传送一个字节或字

修改地址指针

修改串长度值

传送完否?

Page 9: 二进制到 BCD 的转换

9

串比较指令例测试 200 个字节数据是否传送正确:

LEA SI , MEM1

LEA DI , MEM2

MOV CX , 200

CLD

REPE CMPSB

TEST CX , 00FFH

JZ STOP

DEC SI

MOV AL ,[SI]

MOV BX , SI

STOP : HLT

Page 10: 二进制到 BCD 的转换

10

LEA 指令在程序中的应用

开 始

取源地址

取目标地址

送数据块长度到CL

传送一个字节

修改地址指针

修改计数值

计数值 =0 ?

结 束

N

Y

Page 11: 二进制到 BCD 的转换

11

LEA 指令在程序中的应用 LEA SI , MEM1

LEA DI , MEM2

MOV CL , 50

NEXT : MOV AL , [SI]

MOV [DI] , AL

INC SI

INC DI

DEC CL

JNZ NEXT

HLT

Page 12: 二进制到 BCD 的转换

12

§4.5.4 DOS 及 BIOS 功能调用

DOS 功能调用 高级调用,操作系统提供

BIOS 功能调用 低级调用

1. DOS 模块和 BIOS 的关系

BIOS--- 外部设备管理软件,固化在主板的 ROM 中。

DOS---- 操作系统。包含 IBMBIO.COM (输入输出设备处理程序), IBMDOS.COM( 文件管理及处理程序 ) ,

COMMAND.COM (命令处理程序)

Page 13: 二进制到 BCD 的转换

13

2.中断调用及中断服务子程序返回3.DOS 功能调用

包含多个子功能的功能包,用软中断指令INT 21H 调用,中断类型码固定为21H ;

各子功能采用功能号来区分。

附录 C

Page 14: 二进制到 BCD 的转换

14

DOS 功能调用设备管理目录目录管理管理文件管理文件管理其它其它

调用格式: MOV AH ,功能号 ; < 置相应参数 >

INT 21H

Page 15: 二进制到 BCD 的转换

15

1 )返回 DOS

调用方法:

MOV AH , 4CH ;功能号 4CH

INT 21H

2 )键盘输入并显示 MOV AH , 1

INT 21H ;从键盘输入一个字符保存在 AL 中,并在屏幕上显示。

Page 16: 二进制到 BCD 的转换

16

单字符输入例GET_KEY: MOVAH,1 INT 21H CMP AL,’Y’ JZ YES CMP AL,’N’ JZ NO JNZ GET_KEY YES: ┇ NO: ┇

交互式应 答程序

Page 17: 二进制到 BCD 的转换

17

3 )键盘输入但不显示输入字符 MOV AH , 08H

INT 21H ;从键盘输入一字符,保存在 AL 中,但

不显示,用来设置口令。

4 )显示 DL中的字符MOV DL ’, A’

MOV AH , 02H

INT 21H

Page 18: 二进制到 BCD 的转换

18

单字符显示输出例 MOV AH , 02 MOV DL , 41H INT 21H

执行结果:屏幕显示 A

Page 19: 二进制到 BCD 的转换

19

从键盘输入字符串

AH 功能号 OAH

DS : DX 字符串在内存中的存放地址

INT 21H P169 例

Page 20: 二进制到 BCD 的转换

20

定义字符缓冲区 用户自定义缓冲区格式:

0DHN1 N2

整个缓冲区

最大键入字符数

实际键入字符数

Page 21: 二进制到 BCD 的转换

21

输入字符串程序段 DAT1 DB 20 ,?, 20 DUP (?)

LEA DX , DAT1

MOV AH , 0AH

INT 21H

在数据段中定义

Page 22: 二进制到 BCD 的转换

22

输入缓冲区

14H ?

20 个字节

定义后的输入缓冲区初始状态:

Page 23: 二进制到 BCD 的转换

23

字符串输出显示

AH 功能号 O9H

DS : DX 待输出字符串的偏移地址

INT 21H

被显示的字符串必须以‘ $’ 结束 , 且所显示的内容不应出现非可见的 ASCII 码

Page 24: 二进制到 BCD 的转换

24

字符串输出显示例DATA SEGMENT

MESS1 DB ‘Input String:’ 0DH , 0AH,’$’

DATA ENDS

CODE SEGMENT

┇MOV AH , 09

MOV DX , OFFSET MESS1

INT 21H

Page 25: 二进制到 BCD 的转换

25

结束用户程序返回 DOS的方法

1 用 4CH 功能 MOV AH , 4CH

INT 21H

2 用中断调用 20H

INT 20H

3 转移到 0 单元 JMP 0

4 用 00H 功能 MOV AH , 00

INT 21H

Page 26: 二进制到 BCD 的转换

26

4.BIOS功能调用 1 )设置显示方式 P171 2 )设置光标大小 MOV AH , 1 ;功能号为 1

MOV CH , 0 ;光标顶值( 0---11 ) MOV CL , 12 ;光标底值( 1—12 ) INT 10H 3 )设置光标位置 P172

Page 27: 二进制到 BCD 的转换

27

在计算机上进行程序设计过程

D:\masm>EDIT 输入源程序D:\masm>MASM 汇编D:\masm>LINK 链接D:\masm>TD 调试

Page 28: 二进制到 BCD 的转换

28

作业:4.1----4.29

Page 29: 二进制到 BCD 的转换

29

七、宏命令伪指令 宏命令 -------- 源程序中由汇编程序识别的具有 独立功能的一段程序代码 格式: 宏命令名 MACRO < 形式参数 >

ENDM 宏体