第6 Turbo c嵌入式汇编方式 >格式 asm操作码操作数<;或换行> >举例 asm mov ax, ds, asm pop ax asm pop ds; asm ret asm push ds
第6章 Turbo C嵌入式汇编方式 ➢格式 asm 操作码 操作数 <;或换行> ➢举例 asm mov ax,ds; asm pop ax; asm pop ds; asm ret; asm push ds
第6 若干注意事项 操作码支持80868087指令或若干伪指 令:db/dw/d和 extern >操作数是操作码可接受的数据:立即数、 寄存器名,还可以是C语言程序中的常 量、变量和标号等 >内嵌的汇编语句可以用分号“;”结束, 也可以用换行符结束 >使用C的注释,如/*∴.*/ 正确运用通用寄存器、标号等
第6章 若干注意事项 ➢操作码支持8086/8087指令或若干伪指 令:db/dw/dd和extern ➢操作数是操作码可接受的数据:立即数、 寄存器名,还可以是C语言程序中的常 量、变量和标号等 ➢内嵌的汇编语句可以用分号“;”结束, 也可以用换行符结束 ➢使用C的注释,如/ * … * / ➢正确运用通用寄存器、标号等
例6.2-1/2 /★工T602.C* include <stdio. h> void upper(char *dest, char *src) asm ov s五,sc /*dest和sxc是地址指针*/ asm mov di, dest asm cld loop: asm lodsb /*C语言定义的标号*/ asm cmp ali'a' asm jb copy/*转移到c的标号*/ asm cmp al,'z' asi ja copy /不是’a′到’z之间的字符原样复制*
/ * LT602.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’之间的字符原样复制*/ 例6.2-1/2
例6.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: \n%s\n",str)i printf("Uppercase string: \nos\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); } 例6.2-2/2
第6 Turbo c模块连接的约定规则 >命名约定 汇编语言过程中被c语言调用的标识符前要加上 下划线“” >声明约定 ■C对调用的外部过程、变量等采用 EXTERN说明 汇编语言程序的标识符用 public操作符定义 >寄存器使用约定 >存储模式约定 ■采用相同的存储模式 >参数传递约定:堆栈和共享变量
第6章 Turbo C模块连接的约定规则 ➢ 命名约定 ◼ 汇编语言过程中被C语言调用的标识符前要加上 下划线“_” ➢ 声明约定 ◼ C对调用的外部过程、变量等采用EXTERN说明 ◼ 汇编语言程序的标识符用public操作符定义 ➢ 寄存器使用约定 ➢ 存储模式约定 ◼ 采用相同的存储模式 ➢ 参数传递约定:堆栈和共享变量