第7章 7.1 Turbo c嵌入式汇编方式 格式 asm操作码操作数<;或换行> >举例 asm mov ax, as, asm pop ax; asm pop ds; asm ret asm push ds
第 7 章 7.1 Turbo C嵌入式汇编方式 ➢格式 asm 操作码 操作数 <;或换行> ➢举例 asm mov ax,ds; asm pop ax; asm pop ds; asm ret; asm push ds
第7章 若干注意事项 >操作码支持8086/8087指令或若干伪指令: db/dwdd和 extern >操作数是操作码可接受的数据:立即数、 寄存器名,还可以是C语言程序中的常量、 变量和标号等 >内嵌的汇编语句可以用分号“;”结束,也可 以用换行符结束 >使用C的注释,如/…*/ >正确运用通用寄存器、标号等
第 7 章 若干注意事项 ➢操作码支持8086/8087指令或若干伪指令: db/dw/dd和extern ➢操作数是操作码可接受的数据:立即数、 寄存器名,还可以是C语言程序中的常量、 变量和标号等 ➢内嵌的汇编语句可以用分号“;”结束,也可 以用换行符结束 ➢使用C的注释,如/ * … * / ➢正确运用通用寄存器、标号等
例7.2-1/2 *工702.C* #立nc1ude< stdio.h> void upper(char *dest, char *src) asin Iov S1, SIC /*dest和sxc是地址指针*/ asm moy di, dest asm cld loop: asm lodsb /*C语言定义的标号*/ asm cmp al,'a' asm jb copy/*转移到c的标号*/ asm cmp al,'z' asi Ja copy /不是’a到z之间的字符原样复制*
/ * LT702.C */ #include <stdio.h> void upper(char *dest,char *src) { asm mov si,src /* dest和src是地址指针 */ asm mov di,dest asm cld loop: asm lodsb /* C语言定义的标号 */ asm cmp al,'a' asm jb copy /* 转移到C的标号 */ asm cmp al,'z' asm ja copy /* 不是’a’到’z’之间的字符原样复制*/ 例7.2-1/2
例7.2-2/2 asm sub a1,20h/*小写字母转换成大写* copy: asm stosb asm and al, al /*C语言中,字符串用NU(0)结尾*/ asm inz loop main()/*主程序*/ char str[]=This started Out As Lowercase!i char chr [100]; upper(chr, str)i printf ("Origin string: ns\n",str)i printf("Uppercase String: \n%s\n",chr)i
asm sub al,20h /*小写字母转换成大写*/ copy: asm stosb asm and al,al /* C语言中,字符串用NULL(0)结尾 */ asm jnz loop } main() /* 主程序 */ { char str[]="This Started Out As Lowercase!"; char chr[100]; upper(chr,str); printf("Origin string:\n%s\n",str); printf("Uppercase String:\n%s\n",chr); } 例7.2-2/2
第7章 7.2 Turbo c模块连接方式 √要注意模块连接的约定规则 ■命名约定:汇编语言过程应采用c语言类型 ■声明约定 ■寄存器使用约定 存储模式约定:采用相同的存储模式 √参数传递是关键 ■通过堆栈传递入口参数 ■通过寄存器返回出口参数
第 7 章 7.2 Turbo C模块连接方式 ✓要注意模块连接的约定规则 ◼ 命名约定:汇编语言过程应采用C语言类型 ◼ 声明约定 ◼ 寄存器使用约定 ◼ 存储模式约定:采用相同的存储模式 ✓参数传递是关键 ◼ 通过堆栈传递入口参数 ◼ 通过寄存器返回出口参数