第二章软件设计技术 2-1数据的存储方式 22常用DS系统功能调用 23BCD数的运算 24补码与求补 25进制的转换 2-6数的排序 目录
第二章 软件设计技术 2-1 数据的存储方式 2-2 常用DOS系统功能调用 2-3 BCD数的运算 2-4 补码与求补 2-5 进制的转换 片头 2-6 数的排序 目录
21数据的存储方式 内存数据区中数据的存储 存储方式一一由低至高存放 即:低位数存低单元,高位数存高单元。 data segment w000121 W DW 0012H 0001H 00 H N DW 3456H N 0002H56 data ends 0003H 34
2-1 数据的存储方式 一.内存数据区中数据的存储 存储方式----由低至高存放 即:低位数存低单元,高位数存高单元。 data segment W DW 0012H N DW 3456H data ends 0000H 0001H 0002H 0003H W N L H 12 00 56 34
.显示缓冲区中数据的存储 存储方式由高至低存放(因为显示是由左至右) 即:高位数存低单元,低位数存高单元 data segment OBUF DB31H,32H,′A′,$′ data ends 一显示:12 AOBUF 0000H31 H 0001H 32 0002H 4 0003H24 回章首
存储方式----由高至低存放(因为显示是由左至右) 即:高位数存低单元,低位数存高单元 data segment OBUF DB 31H, 32H,’A’ , ’$’ data ends 显示:12A 0000H 0001H 0002H 0003H OBUF H L 31 32 41 24 $ 二.显示缓冲区中数据的存储 回章首
2—2常用DS系统功能调用 表一.D05系统功能调用 调用号功能 入口参数 出口参数 键入并显 示1个字符 字符的ASCI码在AL中 显示1个字 2 符 字符的ASCI码置DL 字符串首址置DS:DX, 9 显示字符 串 字符串以“sS’结尾 (用户设置) 显示区首址置DS:DX 键入的实际字符数在第二 单元,键入字符的ASCI 10 键入并显第一单元置允许键入 示字符串的最大字符数(含 码从第三单元开始存放, 个回车符) 以“0D'结尾(自动存放 检查键盘 有,则AL=FFH;无,则 有无键入 AL=OOH
2-2 常用DOS系统功能调用 表一. DOS系统功能调用 调用号 功能 入口参数 出口参数 1 键入并显 示1个字符 字符的ASCII码在AL中 2 显示1个字 符 字符的ASCII码置DL 9 显示字符 串 字符串首址置DS:DX, 字符串以‘$’结尾 (用户设置) 10 键入并显 示字符串 显示区首址置DS:DX, 第一单元置允许键入 的最大字符数(含一 个回车符) 键入的实际字符数在第二 单元,键入字符的ASCII 码从第三单元开始存放, 以‘0D’结尾(自动存放|) 11 检查键盘 有无键入 有,则AL=FFH;无,则 AL=00H
D0S系统功能调用过程: 1.调用号 AH 2.输入参数—→DS:DX 3执行INT21H 4.分析处理出口参数
DOS系统功能调用过程: 1.调用号 AH 2.输入参数 DS:DX 3.执行 INT 21H 4.分析处理出口参数
9号功能调用 显示缓冲区: data segment 存放显示字符 OBUF DB31H,32H,A’,”$ 串的ASCI码 data ends OBUFO00OH 31 H 0001H 32 004241< 0003H24 主程序段: MOV DX, OFFSET OBUF字符首址→DS:DX MOV AH,9功能号→AH INT 21H 显示:12A
data segment OBUF DB 31H, 32H, ’A’ , ’$’ data ends 主程序段: MOV DX,OFFSET OBUF MOV AH,9 INT 21H 显示:12A 字符首址 → DS:DX 功能号 → AH 0000H 0001H 0002H 0003H OBUF H L 31 32 41 24 $ 显示缓冲区: 存放显示字符 串的ASCII码 一.9号功能调用
10号功能调用实际字 data segment符数 开始存放键入字 IBUF DB OFFH20,255DUP符串的ASC码吗 data ends 0000H IBUF FF 最大字 0001H 02 符数 0002H 31|(H 0003H 41 主程序段: 04H4「0D〈回车符 MOV DX, OFFSET IBUF 显示缓冲区首址→DS:DX MOV AH, 10 INT 21H 功能号→AH 键入并显示:1A
data segment IBUF DB OFFH,0,255 DUP(?) data ends 主程序段: MOV DX,OFFSET IBUF MOV AH,10 INT 21H 键入并显示:1A 显示缓冲区首址→ DS:DX 功能号 → AH 0000H FF 0001H 00 0002H 00 0003H 00 0004H 00 IBUF H L 02 31 回车符 开始存放键入字 符串的ASCII码 实际字 符数 最大字 符数 41 0D 二.10号功能调用
例:镜子程序 数据段的定义: data segment use16 obuf db >,0dh,Oah, ' S buf db Offh, 0, 255 dup(?) data ends
例:镜子程序: 数据段的定义: data segment use16 obuf db '>',0dh,0ah,'$' buf db 0ffh,0,255 dup(?) data ends
程序段部分: 行 mov dx, offset obuf;显示提示符“>”并回车换 mov ah. 9 int 2lh mov dx offset ibuf ;键入并显示字符串 mov ah. 10 int 21h mov bl. buf+1 将“$“送键入字符串后 moy bh. 0 mov buf[bx+2],’$ mov dl, Oah ;换行 mov ah. 2 int 2lh moⅴdx, offset ibuf+2;再显示键入的字符串 mov ah. 9 int 21h
程序段部分: 行 mov dx,offset obuf ;显示提示符“>”并回车换 mov ah,9 int 21h mov dx,offset ibuf ;键入并显示字符串 mov ah,10 int 21h mov bl,ibuf+1 ;将“$“送键入字符串后 mov bh,0 mov ibuf[bx+2],'$' mov dl,0ah ;换行 mov ah,2 int 21h mov dx,offset ibuf+2 ;再显示键入的字符串 mov ah,9 int 21h
2-2习题:INT21H系统功能调用 1.用汇编实现下列C功能: 0000 char s16; 不拘一格,灵活 printf(In What is your name?"); 使用1/2/9/10号 scant(“%s”,s) int21h功能调用! printf("InMy name is %sIn",S); 要求:1.独立编辑、编译、链接、调试; 2.编译成EXE文件后,转到DOS下运行EXE程序 看是否能否正确运行;若不能则独立调试、纠错; 3.根据RM窗口,在作业纸后面画出程序运行一次后 的详细的数据区存储映像图(标好地址和存储值) 4.完成上述内容后举手待查
1. 用汇编实现下列C功能: 2-2习题: INT 21H系统功能调用 …… char s[16]; printf(“\nWhat is your name? ”); scanf(“%s”,s); printf(“\nMy name is %s\n”,s); …… 不拘一格,灵活 使用1/2/9/10号 int 21h功能调用! 要求:1. 独立编辑、编译、链接、调试; 2. 编译成.EXE文件后,转到DOS下运行.EXE程序, 看是否能否正确运行;若不能则独立调试、纠错; 3. 根据R/M窗口,在作业纸后面画出程序运行一次后 的详细的数据区存储映像图(标好地址和存储值); 4. 完成上述内容后举手待查