汇编语言作业(四)

目录

一、实验目的

二、实验内容

三、实验步骤以及结果

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

相关推荐
全栈师9 分钟前
SQL Server中关于个性化需求批量删除表的做法
数据库·oracle
Data 31717 分钟前
Hive数仓操作(十七)
大数据·数据库·数据仓库·hive·hadoop
小O_好好学18 分钟前
CentOS 7文件系统
linux·运维·centos
哲伦贼稳妥41 分钟前
一天认识一个硬件之机房地板
运维·网络·经验分享·其他
BergerLee1 小时前
对不经常变动的数据集合添加Redis缓存
数据库·redis·缓存
john_hjy1 小时前
11. 异步编程
运维·服务器·javascript
x晕x1 小时前
Linux dlsym符号查找疑惑分析
linux·运维·服务器
gorgor在码农1 小时前
Mysql 索引底层数据结构和算法
数据结构·数据库·mysql
活跃的煤矿打工人2 小时前
【星海saul随笔】Ubuntu基础知识
linux·运维·ubuntu
bug菌¹2 小时前
滚雪球学Oracle[6.2讲]:Data Guard与灾难恢复
数据库·oracle·data·灾难恢复·guard