汇编语言作业(四)

目录

一、实验目的

二、实验内容

三、实验步骤以及结果

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 、如最后一个输出长度我就是卡住了,通过文心一言输出的样例代码解决了问题。

相关推荐
未若君雅裁15 分钟前
MySQL-MVCC核心原理-版本链ReadView与可见性判断
数据库·mysql
KaMeidebaby4 小时前
卡梅德生物技术快报|骆驼纳米抗体:从原核表达、高通量测序到分子对接全流程实现
前端·数据库·其他·百度·新浪微博
2301_783848657 小时前
优化文本分类中堆叠模型的网格搜索性能:避免训练卡顿的实战指南
jvm·数据库·python
IT大白鼠7 小时前
Linux进程与计划任务管理:技术详解与实战指南
linux·运维·服务器
拾贰_C7 小时前
【Ubuntu | 公共工作站 | mysql 】 MySQL残留物残留数据
linux·mysql·ubuntu
TE-茶叶蛋7 小时前
DBeaver 的Explain 执行计划,分析sql的性能
数据库·sql
临街的小孩7 小时前
Docker 容器内运行 ROS Noetic 图形界面(rqt_image_view)极简教程总结
运维·docker·容器
Ujimatsu8 小时前
虚拟机安装Ubuntu 26.04.x服务器版(命令行版)(2026.5)
linux·windows·ubuntu
CLX05058 小时前
如何安装Oracle 12c Cloud Control_OMS服务端组件与Agent部署
jvm·数据库·python
m0_617493948 小时前
PySide6 网络请求深度实测:从基础 API 调用到数据解析实战指南
数据库