鸟羽刹那吧 关注:3贴子:99

回复:建立个水楼

只看楼主收藏回复

1


IP属地:江苏来自Android客户端76楼2024-12-13 23:47
回复
    1


    IP属地:江苏来自Android客户端77楼2024-12-13 23:47
    回复
      2026-02-02 10:18:21
      广告
      不感兴趣
      开通SVIP免广告
      1


      IP属地:江苏来自Android客户端78楼2024-12-13 23:47
      回复
        m
        复制代码
        ; 假设串行口基地址为0x3F8(COM1)
        ; 波特率9600, 8数据位, 1停止位,无校验
        MOV DX, 0x3F8 ; 设置串口地址
        ; 初始化串行口
        MOV AL, 0x80 ; 启用访问波特率生成器
        OUT DX, AL
        MOV AL, 0x03 ; 设置波特率9600(先后两字节)
        OUT DX, AL
        MOV AL, 0x00 ; 低字节
        OUT DX, AL
        MOV AL, 0x03 ; 配置8数据位, 无校验, 1停止位
        OUT DX, AL
        ; 循环等待键盘输入并发送数据
        WAIT_KEY:
        ; 检查是否按下‘ESC’键
        MOV AH, 0x00 ; 获取键盘输入
        INT 0x16
        CMP AL, 0x1B ; 检查是否为ESC
        JE END_PROGRAM
        ; 否则将字符发送到串口
        MOV DX, 0x3F8 ; 串口地址
        SEND_CHAR:
        IN AL, DX
        TEST AL, 0x20 ; 检查发送缓冲区是否空
        JZ SEND_CHAR ; 如果不空,继续等待
        OUT DX, AL ; 发送字符
        ; 显示接收字符(假设有屏幕输出功能)
        RECEIVE_CHAR:
        IN AL, DX
        TEST AL, 0x01 ; 检查接收缓冲区是否有数据
        JZ RECEIVE_CHAR ; 如果没有数据,继续等待
        ; 显示接收到的字符 (假设显示在屏幕)
        MOV AH, 0x0E
        INT 0x10
        JMP WAIT_KEY ; 继续等待输入
        END_PROGRAM:
        ; 结束程序
        MOV AH, 0x4C
        INT 0x21
        实验总结:
        理解了串行口的基本工作原理,包括波特率、数据位、停止位等配置。
        掌握了查询方式的串行通信方法。
        学会了如何在汇编语言中操作串口,进行数据发送和接收。










        C


        IP属地:江苏来自Android客户端79楼2024-12-24 09:40
        回复
          .model small
          .stack 100h
          .data
          COM1_BASE equ 03F8h ; COM1端口基地址
          IER equ COM1_BASE + 1 ; 中断使能寄存器
          IIR equ COM1_BASE + 2 ; 中断识别寄存器
          LCR equ COM1_BASE + 3 ; 线路控制寄存器
          LSR equ COM1_BASE + 5 ; 线路状态寄存器
          MSR equ COM1_BASE + 6 ; 调制解调器状态寄存器
          DATA equ COM1_BASE ; 数据寄存器
          ESC_KEY db 1Bh ; ESC键的ASCII码
          PROMPT_MSG db 'Enter a character (ESC to quit): $'
          .code
          main proc
          mov ax, @data
          mov ds, ax
          call setup_com1
          read_loop:
          ; 显示提示信息
          lea dx, PROMPT_MSG
          call print_string
          ; 从键盘读取字符
          mov ah, 07h
          int 21h
          cmp al, ESC_KEY
          je exit_program
          ; 发送字符到COM1
          call send_char
          ; 接收字符从COM1
          call receive_char
          ; 显示接收到的字符
          mov dl, al
          mov ah, 02h
          int 21h
          jmp read_loop
          exit_program:
          ; 重置8250
          in al, LCR
          and al, 7Fh ; 清除D7位,禁用除数锁存器
          out LCR, al
          mov al, 00h ; 禁用所有中断
          out IER, al
          ; 返回DOS
          mov ah, 4Ch
          int 21h
          main endp
          ; 配置8250 UART
          setup_com1 proc
          ; 设置波特率为9600 (1843200 / 16 / 9600 = 12)
          mov al, 80h ; DLAB=1, 访问除数寄存器
          out LCR, al
          mov al, 0Ch ; LSB of divisor (12)
          out DATA, al
          mov al, 00h ; MSB of divisor (12)
          out IER, al
          ; 配置数据格式: 8数据位, 无校验, 1停止位
          mov al, 03h ; 8N1 (无校验, 8位数据, 1位停止)
          out LCR, al
          ; 启用发送和接收中断 (这里使用查询方式,所以可以不启用中断)
          mov al, 01h ; 仅启用接收线状态中断
          out IER, al
          ret
          setup_com1 endp
          ; 发送字符到COM1
          send_char proc
          ; 等待发送缓冲区为空
          wait_to_send:
          in al, LSR
          test al, 20h ; 检查THRE标志 (发送保持寄存器空)
          jz wait_to_send
          ; 发送字符
          mov al, ah
          out DATA, al
          ret
          send_char endp
          ; 从COM1接收字符
          receive_char proc
          ; 等待接收数据可用
          wait_to_receive:
          in al, LSR
          test al, 01h ; 检查DR标志 (数据准备好)
          jz wait_to_receive
          ; 读取字符
          in al, DATA
          mov ah, al
          ret
          receive_char endp
          ; 打印字符串
          print_string proc
          mov ah, 09h
          int 21h
          ret
          print_string endp
          end main


          IP属地:江苏来自Android客户端80楼2024-12-24 09:51
          回复
            1


            IP属地:江苏来自Android客户端81楼2025-01-17 13:02
            回复
              11


              IP属地:江苏来自Android客户端82楼2025-02-10 15:33
              回复
                111


                IP属地:江苏83楼2025-03-07 12:54
                回复
                  2026-02-02 10:12:21
                  广告
                  不感兴趣
                  开通SVIP免广告
                  1


                  IP属地:江苏来自Android客户端84楼2025-03-31 10:21
                  回复
                    CREATE DATABASE S_C_SC;
                    USE S_C_SC;


                    IP属地:江苏来自Android客户端85楼2025-03-31 14:20
                    回复
                      根据你的要求,我将帮助你创建一个名为 `S_C_SC` 的数据库,并在其中创建三个表:`Student`、`Course` 和 `SC`。以下是创建这些表的 SQL 代码:
                      ### 创建数据库
                      ```sql
                      CREATE DATABASE S_C_SC;
                      USE S_C_SC;
                      ```
                      ### 创建 `Student` 表
                      ```sql
                      CREATE TABLE Student (
                      Sno CHAR(10) PRIMARY KEY,
                      Sname VARCHAR(50),
                      Ssex CHAR(1),
                      Sage INT,
                      Sdept VARCHAR(50)
                      );
                      ```
                      ### 创建 `Course` 表
                      ```sql
                      CREATE TABLE Course (
                      Cno CHAR(10) PRIMARY KEY,
                      Cname VARCHAR(50),
                      Cpno CHAR(10),
                      Ccredit INT
                      );
                      ```
                      ### 创建 `SC` 表
                      ```sql
                      CREATE TABLE SC (
                      Sno CHAR(10),
                      Cno CHAR(10),
                      Grade INT,
                      PRIMARY KEY (Sno, Cno),
                      FOREIGN KEY (Sno) REFERENCES Student(Sno),
                      FOREIGN KEY (Cno) REFERENCES Course(Cno)
                      );
                      ```
                      ### 插入数据
                      #### 插入 `Student` 表数据
                      ```sql
                      INSERT INTO Student (Sno, Sname, Ssex, Sage, Sdept) VALUES
                      ('201215121', '李勇', '男', 20, 'CS'),
                      ('201215122', '刘晨', '女', 19, 'CS'),
                      ('201215123', '王敏', '女', 18, 'MA'),
                      ('201215125', '张立', '男', 19, 'IS');
                      ```
                      #### 插入 `Course` 表数据
                      ```sql
                      INSERT INTO Course (Cno, Cname, Cpno, Ccredit) VALUES
                      ('1', '数据库', '5', 4),
                      ('2', '数学', NULL, 2),
                      ('3', '信息系统', '1', 4),
                      ('4', '操作系统', '6', 3),
                      ('5', '数据结构', '7', 4),
                      ('6', '数据处理', NULL, 2),
                      ('7', 'PASCAL语言', '6', 4);
                      ```
                      #### 插入 `SC` 表数据
                      ```sql
                      INSERT INTO SC (Sno, Cno, Grade) VALUES
                      ('201215121', '1', 92),
                      ('201215121', '2', 85),
                      ('201215121', '3', 88),
                      ('201215122', '2', 90),
                      ('201215122', '3', 80);
                      ```
                      ### 查询 `CS` 系所有学生的姓名和年龄
                      ```sql
                      SELECT Sname, Sage FROM Student WHERE Sdept = 'CS';
                      ```
                      你可以将这些 SQL 语句复制到 MySQL 客户端中执行,以创建数据库和表,并插入数据。


                      IP属地:江苏来自Android客户端86楼2025-03-31 14:20
                      回复
                        根据您的要求,以下是针对每个查询任务的 SQL 语句:
                        ### (1)查询 'CS' 系所有学生的姓名和年龄
                        ```sql
                        SELECT Sname, Sage ;
                        FROM Student
                        WHERE Sdept = 'CS';
                        ```
                        ### (2)查询所有选修“信息系统”课程的学生姓名及其成绩,并按成绩降序排列
                        ```sql
                        SELECT s.Sname, sc. Grade
                        FROM Student s
                        JOIN SC sc ON s. Sno = sc. Sno
                        JOIN Course c ON sc. Cno = c. Cno
                        WHERE c. Cname = '信息系统'
                        ORDER BY sc. Grade DESC;
                        ```
                        ### (3)查询没有选修课程的女学生学号和姓名
                        ```sql
                        SELECT Sno, Sname
                        FROM Student
                        WHERE Ssex = '女' AND Sno NOT IN (SELECT Sno FROM SC);
                        ```
                        ### (4)按学号统计每位同学选修的课程门数
                        #### a. 仅显示选修课程门数超过2门的信息;
                        #### b. 显示SNO、Sname 和相应的课程门数;
                        #### c. 显示时,查询结果按课程门数降序排列,课程门数相同按SNO升序排列。
                        ```sql
                        SELECT s. Sno, s. Sname, COUNT(sc. Cno) AS CourseCount
                        FROM Student s
                        LEFT JOIN SC sc ON s. Sno = sc. Sno
                        GROUP BY s. Sno, s. Sname
                        HAVING COUNT(sc. Cno) > 2
                        ORDER BY CourseCount DESC, s. Sno ASC;
                        ```
                        ### (5)查询平均成绩排名第2名的学生的学号、姓名和平均成绩
                        ```sql
                        SELECT s. Sno, s. Sname, AVG(sc. Grade) AS AverageGrade
                        FROM Student s
                        JOIN SC sc ON s. Sno = sc. Sno
                        GROUP BY s. Sno, s. Sname
                        ORDER BY AverageGrade DESC
                        LIMIT 1 OFFSET 1;
                        ```
                        请在 MySQL 数据库中执行上述 SQL 语句,并将输出结果截图。如果有任何问题或需要进一步的帮助,请随时告诉我!


                        IP属地:江苏来自Android客户端87楼2025-03-31 15:04
                        回复
                          1


                          IP属地:江苏来自Android客户端88楼2025-04-24 10:31
                          回复
                            1


                            IP属地:江苏来自Android客户端89楼2025-05-19 13:16
                            回复
                              2026-02-02 10:06:21
                              广告
                              不感兴趣
                              开通SVIP免广告
                              1


                              IP属地:江苏来自Android客户端90楼2025-06-12 10:22
                              回复