微机原理与接口技术程序设计

利用DOS系统功能调用,将键盘输入的小写字母转换成大写字母输出显示,直到输入“$”字符时停止输出。
(1)第一步应分析要求,选择合适的结构设计流程图。
例如:本设计采用 结构。(注意选择的结构和下面自己编写的程序对应。)
(2)此程序不需定义数据段,直接从代码段定义开始完成程序设计。

流程图:

img

代码设计如下:将键入的字符送AL寄存器,并送屏幕显示输出。转换成大写后,将DL寄存器中的内容送屏幕显示输出。

 CODE SEGMENT
    ASSUME CS:CODE
START:
    MOV AX, DATA
    MOV DS, AX
    MOV BL, '$'
INPU:MOV AH, 01H
    INT 21H;读数据
    CMP AL, BL;判断是否为$字符
    JE EXT;若是则退出程序
    SUB AL, 20H;小写转大写,ASCII码
    MOV DL, AL
    MOV AH, 02H
    INT 21H;显示DL中的字符
EXT: MOV AH, 4CH
    INT 21H
CODE ENDS
    END START 

引用chatGPT作答,根据题目要求,我们需要编写一个程序,能够接收键盘输入的小写字母,并将其转换为大写字母输出,直到输入“$”字符时停止输出。下面是程序的设计流程图:

开始
读取键盘输入
如果输入字符为"$",则结束程序
如果输入字符为小写字母,转换为大写字母并输出
重复执行读取输入直到结束程序
结束

下面是基于DOS系统功能调用的程序代码实现:

assume cs:code

code segment
start:
mov ah, 1      ; 从键盘读取字符
int 21h        ; 调用DOS系统功能
cmp al, '$'    ; 判断是否输入结束
je end_prog    ; 如果是"$"字符,则结束程序
cmp al, 'a'    ; 判断是否小写字母
jb skip        ; 如果小于'a',则跳过
cmp al, 'z'    ; 判断是否大写字母
ja skip        ; 如果大于'z',则跳过
sub al, 20h    ; 转换为大写字母
skip:
mov ah, 2      ; 输出字符
int 21h        ; 调用DOS系统功能
jmp start      ; 重复执行读取输入直到结束程序

end_prog:
mov ah, 4Ch    ; 退出程序
int 21h        ; 调用DOS系统功能
code ends
end start

该程序首先使用DOS系统功能调用读取键盘输入的字符,然后判断是否为“$”字符,如果是则结束程序,如果不是则判断是否为小写字母,如果是则转换为大写字母并输出。程序使用无限循环重复执行读取输入直到结束程序。最后程序退出并返回DOS系统。注意,在代码段定义时需要使用assume cs:code指令将代码段和代码段寄存器CS关联。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7731246
  • 这篇博客你也可以参考下:本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符
  • 除此之外, 这篇博客: 拆分一个链表为偶数链表和奇数链表中的 设计一个算法,将一个结点值为自然数的单链表拆分为两个单链表,原表中保留值为偶数的结点,而值为奇数的结点按他们在原表中的相对次数组成一个新的单链表 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #define FLAG -1    //停止输入的标志
    typedef struct Node
    {
        int data;
        struct Node * next;
    }LNode,*LinkList;
    
    void CreateLinkList(LinkList L);
    void show_List(LinkList L);
    LNode *Breakupthelist(LinkList La,int *A,int *B);
    
    void main()
    {
        LinkList La,Lb;
        int A = 0,B = 0;
        La = (LinkList)malloc(sizeof(LNode));//创建头结点
        printf("创建单链表:\n");
        CreateLinkList(La);
        printf("遍历单链表:\n");
        show_List(La);
        printf("拆分链表:\n");
        Lb = Breakupthelist(La,&A,&B);//A,B用来判断全是奇数或全是偶数的情况
        if(A == 0)//全是偶数
        {
            printf("偶数链:\n");
            show_List(La);
            printf("奇数链为空!\n");
        }
        else if(B == 0)//全是奇数
        {
            printf("奇数链:\n");
            show_List(Lb);
            printf("偶数链为空!\n");
        }
        else
        {
            printf("偶数链:\n");
            show_List(La);
            printf("奇数链:\n");
            show_List(Lb);
        }
    
    
    }
    
    void CreateLinkList(LinkList L)  //尾插法  输出是输入的正序
    {
        LinkList s,r;
        int x;
        scanf("%d",&x);
        r = L;
        while(x != FLAG)
        {
            s = (LNode *)malloc(sizeof(LNode));
            s->data = x;
            r->next = s;
            r = s;
            scanf("%d",&x);
        }
        r->next = NULL;
    }
    
    void show_List(LinkList L)
    {
        LinkList p = L->next;
        printf("%d",p->data);
        p = p ->next;
        while(p != NULL)
        {
            printf("->%d",p->data);
            p = p->next;
        }
        printf("\n");
    }
    
    LNode *Breakupthelist(LinkList La,int *A,int *B) //返回奇数链表的头结点
    {
        LinkList p,q,r;//r始终指向偶数链的尾部
        LinkList Lb = (LinkList)malloc(sizeof(LNode));
        p = La;
        q = Lb;
        r = La;
        p = p->next;
        while(p)
        {
            if(p->data % 2 != 0) //奇数
            {
                q->next = p;
                p = p->next;
                r->next = p;
                q = q->next;
                *A = 1;
            }
            else
            {
                p = p->next;
                r = r->next;
                *B = 1;
            }
        }
        q->next = NULL;
        return Lb;
    }
    
  • 您还可以看一下 CSDN讲师老师的以性别预测为例,谈谈数据挖掘中常见的分类算法课程中的 数据挖掘的基本流程和常见的分类算法小节, 巩固相关知识点