汇编课程设计——混合编程

任务一

一、任务内容:混合编程

        内容:将内存中的一个字符串的小写字母转换为大写并输出

        要求:分别运用混合编程的两种方法完成该任务。

  • 嵌入式编程。
  • C程序调用汇编函数模块

二、设计思路

        对字符串中的字符进行逐个判断,如果是小写(即小于‘z’大于‘a’的字符),则转换为大写。小写字母转换为大写字母需要减去20h。

流程图如下: 

汇编课程设计——混合编程_第1张图片

 三、实现代码

1、嵌入式编程

 //文件名s1.c

#include 
main()
{
    char *str = "This Started Out As Lowercase!";
    printf("Origin string:\n%s\n",str);
    asm  mov si,str
    loop:   asm mov al,[si]
    asm cmp al,'a'
    asm jb loop1
    asm cmp al,'z'
    asm ja loop1
    asm sub al,20h
    asm mov [si],al
    loop1:  asm inc si
    asm and al,al
    asm jnz loop
    printf("Uppercase String:\n%s\n",str);
    getchar();
}

2、 C程序调用汇编函数模块

//文件名ADDC.C

#include 
main()
{
    extern char CHANGE(char*);
    char *str = "This Started Out As Lowercase!";
    printf("Origin string:\n%s\n",str);
    CHANGE(str);
    printf("Uppercase String:\n%s\n",str);
    getchar();
}

//文件名ADDM.asm

_TEXT	segment	byte  public  'CODE'
		assume	cs:_TEXT
public			_CHANGE
_CHANGE		proc
				push		bp
				mov		bp,sp
		loop1:	mov		al,[bp+4]
				cmp		al,'a'
				jb		loop2
				cmp 	al,'z'
				ja		loop2
				sub		al,20h
				mov		[bp+4],al
		loop2:	inc		bp	
				and		al,al
				jnz		loop1
				pop		bp
				ret
_CHANGE		endp
_TEXT			ends
				end

四、调试结果及分析

1、嵌入式编程

DOS

汇编课程设计——混合编程_第2张图片

 调试结果:

        经调试结果分析,原字符串:This Started Out As Lowercase转换成了THIS STARTED OUT AS LOWERCASE!

        程序结果正确,字符串中的小写字母全部转换成了大写字母,其他字符照常输出。

2、 C程序调用汇编函数模块

DOS

        先使用masm ADDM.asm生成ADDM.obj。之后将ADDM.obj复制到turboc2目录下。使用tc.exe生成ADDCM.exe。 

汇编课程设计——混合编程_第3张图片

 调试结果:  

汇编课程设计——混合编程_第4张图片

 

        经调试结果分析,字符串中的小写字母全部转换成了大写字母。大写字符照常输出。

分析:整体思路其实很简单,就是对字符串中的字符进行逐个判断是否为小写字母,若是,则转换为大写。小写字母转换为大写字母的方法为减去20h。但是使用嵌入式编程和C程序调用汇编函数完成该任务,在一定程度上增加了难度。C程序调用汇编函数,涉及到两个文件的操作。函数通过寄存器和堆栈来传递参数和返回函数值。

你可能感兴趣的:(汇编语言,编辑器,c语言)