汇编语言作业(四)

目录

一、实验目的

二、实验内容

三、实验步骤以及结果

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

相关推荐
筑梦之路10 分钟前
linux 系统找出磁盘IO占用元凶 —— 筑梦之路
linux·运维·服务器
ezreal_pan44 分钟前
docker设置镜像加速
运维·docker·容器
LiQiang332 小时前
Ubuntu2404修改国内镜像
linux
杰哥技术分享2 小时前
Ubuntu 22.04安装SQL Server指南
linux·运维·ubuntu·sqlserver
遇见火星2 小时前
ubuntu18.04 升级Ubuntu 20.04
linux·运维·ubuntu·系统升级
x县豆瓣酱2 小时前
【第四节】ubuntu server安装docker
linux·ubuntu·docker
Gene_20222 小时前
【TOOL】ubuntu升级cmake版本
linux·运维·ubuntu
若兰幽竹2 小时前
【从零开始编写数据库:基于Python语言实现数据库ToyDB的ACID特性】
数据库·python
宇钶宇夕2 小时前
S7-200 SMART CPU 密码清除全指南:从已知密码到忘记密码的解决方法
运维·服务器·数据库·程序人生·自动化
思序 LogicFlow2 小时前
关于在Linux上部署 SecretFlow --- P2P部署模式
linux·服务器