汇编语言作业(四)

目录

一、实验目的

二、实验内容

三、实验步骤以及结果

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

相关推荐
努力学习的小廉2 分钟前
深入了解linux系统—— 操作系统的路径缓冲与链接机制
android·linux·服务器
大数据张老师3 分钟前
对比Redis与向量数据库(如Milvus)在AI中的应用
数据库·redis·milvus
蠢货爱好者5 分钟前
Linux中的nfs网络文件系统
linux·服务器·网络
ZZH1120KQ5 分钟前
Linux概述
linux·ubuntu·ssh
余辉zmh36 分钟前
【Linux网络篇】:Socket网络套接字以及简单的UDP网络程序编写
linux·网络·udp
白嫖不白嫖41 分钟前
MySQL 8.0 和 5.7 快速生成测试数据
android·数据库·mysql
CAT_cwds42 分钟前
使用MybatisPlus实现sql日志打印优化
数据库·python·sql
酥暮沐1 小时前
Linux的启动流程
linux·服务器·网络·启动流程
YUNYINGXIA2 小时前
Python操作MySQL数据库
数据库·oracle
java1234_小锋2 小时前
一周学会Pandas2 Python数据处理与分析-Pandas2数据合并与对比-pd.merge():数据库风格合并
数据库·python·pandas