汇编语言作业(四)

目录

一、实验目的

二、实验内容

三、实验步骤以及结果

0.测试PPT中的下列程序:

[1. 利用dos功能调用的01,07 或08号功能,从键盘输入一个数字字符并再调用02号功能将其输出;分析这三种功能调用的异同点](#1. 利用dos功能调用的01,07 或08号功能,从键盘输入一个数字字符并再调用02号功能将其输出;分析这三种功能调用的异同点)

2.编写汇编程序,要求实现:从键盘中输入一个小写字母,然后再输出该字母对应的大写字母。

3.编写汇编程序,要求实现:

[利用DOS 功能调用0A号功能从键盘缓冲区中输入一串字符串(长度最长不超过9)](#利用DOS 功能调用0A号功能从键盘缓冲区中输入一串字符串(长度最长不超过9))

输出该字符串,以及这个字符串的长度

四、实验结果与分析

五、实验总结


一、实验目的

1. 熟悉掌握汇编语言的程序结构,能正确书写数据段、代码段等

2. 利用debug功能,查看寄存器(CS,IP,AX,DS..)及数据段的内容变化,熟悉并了解程序调试方法,并认真观察、判断每条指令执行的结果是否正确。

3. 熟悉dos功能调用中的,实现程序的输入输出。

二、实验内容

1.利用dos功能调用的01,07 或08号功能,从键盘输入一个数字字符并再调用02号功能将其输出;分析这三种功能调用的异同点

// 输入字符,输出*

2. 编写汇编程序,要求实现:
从键盘中输入一个小写字母,然后再输出该字母对应的大写字母

3. 编写汇编程序,要求实现:

利用DOS 功能调用0A号功能从键盘缓冲区中输入一串字符串(长度最长不超过9)

输出该字符串,以及这个字符串的长度

三、实验步骤以及结果

0. 测试PPT中的下列程序:

复制代码
stack segment stack

stack ends

data segment
   buffer db 50, ?, 50 dup('$')
   next_row db 0dh,0ah,'$'
data ends

code segment
assume cs:code, ds:data, ss:stack
start: mov ax, data
      mov ds, ax

      lea dx, buffer
      mov ah, 0ah
      int 21h

      lea dx, next_row
      mov ah, 09h
      int 21h

      mov dx, offset [buffer+2]
      mov ah, 09h
      int 21h

      mov ah, 4ch
      int 21h

code ends
      end start

输出结果:

1. 利用dos功能调用的01,07 或08号功能,从键盘输入一个数字字符并再调用02号功能将其输出;分析这三种功能调用的异同点

// 输入字符,输出※

1 )01功能与02功能结合:

其中最后一部分不可省略,否则程序将无法结束。

Mov ah,01h 输入的字符在al当中,而mov ah,02h 输出的字符在dl当中,所以要将al的值赋给dl。

2 )07与02结合

3 )08与02结合

异同点:

同:输入的字符均在al中。

异:01h会显示输入字符,另外两个不会。

课本中说08h可以通过Ctrl-C检查输入,但我输入Ctrl-C,结果是红心。

附加:输入字符,输出*。

将mov dl,al 改为mov dl '*'即可。

2. **编写汇编程序,要求实现:

从键盘中输入一个小写字母,然后再输出该字母对应的大写字母。**

可见,负数也可为常数。但我想用mov dl,(al-20h)失败了,不知道为什么。

3. 编写汇编程序,要求实现:

利用DOS 功能调用0A号功能从键盘缓冲区中输入一串字符串(长度最长不超过9)

输出该字符串,以及这个字符串的长度

复制代码
stack segment stack

stack ends

data segment
      buffer db 50, ?, 50 dup('$')
      next_row db 0dh,0ah,'$'
data ends

code segment
assume cs:code, ds:data, ss:stack
start: mov ax, data
       mov ds, ax

       lea dx, buffer
       mov ah, 0ah
       int 21h

       lea dx, next_row            ;换行符
       mov ah, 09h
       int 21h

       mov dx, offset [buffer+2]
       mov ah, 09h
       int 21h

lea dx, next_row            ;换行符
       mov ah, 09h
       int 21h
;关键代码在下一段
       mov ah, 02h
       mov dl, [buffer+1]
       add dl, '0';将长度转换为字符
       int 21h
;关键代码如上
       mov ah, 4ch
       int 21h
code ends
       end start
复制代码
mov dl, [buffer+1]
add dl, '0';将长度转换为字符

这一步卡住了我好长时间,下面是没将数字转化为字符的后果

3 对应输出为红桃,6对应输出为黑桃。

总结一下实验现象

当输入的字符串长度为0到9时,正常输出。

当超过9时会输出其他字符:

如长度为10的字符串输出为:(冒号)

长度为11的字符串输出为;(分号)

四、实验结果与分析

见第3部分。

五、实验总结

1 、本次实验,既定实验目的基本完成。

2 、着重理解了int 21h的用法

3 、并成功将VS作为编辑器使用

4 、如最后一个输出长度我就是卡住了,通过文心一言输出的样例代码解决了问题。

相关推荐
Greyson14 分钟前
HTML怎么标注字数限制提示_HTML实时字数统计占位【详解】
jvm·数据库·python
qq_372906938 分钟前
golang如何在Gin中实现路由分组_golang Gin路由分组实现方法
jvm·数据库·python
bugu___10 分钟前
Linux系统、网络知识点回顾1
linux·网络
观无12 分钟前
FastAPI + SQLite 原生无主键表 完整增删改查
数据库·sqlite·fastapi
独自归家的兔15 分钟前
2026年4月16日 Ubuntu系统 Docker 的安装与配置
运维·docker·容器
qq_3422958215 分钟前
如何备份大量小表组成的数据库_并行导出与多文件并发写入.txt
jvm·数据库·python
justjinji19 分钟前
MySQL存储过程中如何防止SQL注入_使用参数化查询规范
jvm·数据库·python
qq_2069013921 分钟前
mysql索引排序规则设置方法_mysqlCollation对索引影响
jvm·数据库·python
HHHHH1010HHHHH28 分钟前
如何快速重置SQL表中的自增ID_使用TRUNCATE与重置命令
jvm·数据库·python
m0_7349497929 分钟前
html怎么转konva舞台_Konva如何在HTML中创建2D绘图舞台
jvm·数据库·python