实验11 编写子程序《汇编语言》- 王爽

2024-08-25 20:36

本文主要是介绍实验11 编写子程序《汇编语言》- 王爽,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 需求

        编写一个子程序,将包含任意字符,以 0 结尾的字符串中的小写字母转变成大写字母,描述如下。

名称:letterc  

功能:将以 0 结尾的字符串中的小写字母转变成大写字母

参数:ds:di 指向字符串首地址

返回:无

应用举例:

assume cs:code, ds:data

data segment

        db "Beginner's All-purpose Symbolic Instruction Code.",0

data ends

code segment

begin:

        mov ax, data

        mov ds, ax

        mov si, 0       

        call letterc

        mov ax, 4c00h

        int 21h

letterc:    

        ...

code ends

end begin

2. 分析

(1) 一个字母的小写字母在assii码表中的值在区间:[97, 122]

(2) 一个字母的大写字母比小写字母小 32,让一个小写字母的assii码的二进制表示的第 5 位置 0 就得到了这个字母的大写字母的assii码值。

(3) 我们用 C 语言来描述功能代码逻辑为:

#include <stdio.h>int main(int argc, char* argv[]) {char str[] = "Beginner's All-purpose Symbolic Instruction Code.\0";char *p = str;	//指向字符串首地址while (*p != 0) {if (*p >= 97 && *p <= 122) {*p = *p & 0b11011111;		// 大写字母比小写字母小32}p++;	//指向下一个字符}printf(str);printf("\n");return 0;
}

3. 代码

assume cs:code, ds:data
data segmentdb "Beginner's All-purpose Symbolic Instruction Code.",0
data ends
code segment
begin:mov ax, datamov ds, axmov si, 0       ;指向字符串首地址call lettercmov ax, 4c00hint 21h;名称:letterc  
;功能:将以 0 结尾的字符串中的小写字母转变成大写字母
;参数:ds:di 指向字符串首地址
;返回:无
letterc:    ;[97, 122]为小写字母的assii码区间mov al, [si]cmp al, 0       je ok           ; al = 0, 跳出循环cmp al, 97      jb next_byte    ; al < 97, 让si指向下一个字节单元cmp al, 122ja next_byte    ; al > 122, 让si指向下一个字节单元and al, 11011111b   ;一个字母的大写字母比小写字母小 32,让第 5位置0就得到了这个字母的大写字母的assii码值mov [si], al
next_byte:inc siloop letterc
ok:retcode ends
end begin

这篇关于实验11 编写子程序《汇编语言》- 王爽的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106590

相关文章

如何编写Linux PCIe设备驱动器 之二

如何编写Linux PCIe设备驱动器 之二 功能(capability)集功能(capability)APIs通过pci_bus_read_config完成功能存取功能APIs参数pos常量值PCI功能结构 PCI功能IDMSI功能电源功率管理功能 功能(capability)集 功能(capability)APIs int pcie_capability_read_wo

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

Wondows dos下怎么编写bat批处理文件

最近搞php,在运行时,以Nginx+php-cgi.exe方式运行Wordpress项目 打开dos,先cd到php-cgi.exe文件当前目录下执行启动命令:php-cgi.exe -b 127.0.0.1:9001再打开一个dos,再cd到nginx.exe文件当前目录下执行启动命令:start nginx 大概过程要经过这些步骤,觉得很麻烦,就学下怎么编写一个bat文件,以双击运行代替

用Python编写倒计时程序:详细教程

目录 引言 环境准备 基本概念 代码实现 步骤一:导入必要的库 步骤二:获取用户输入 步骤三:实现倒计时逻辑 步骤四:整合代码 运行程序 高级功能 扩展功能示例:支持分钟和小时输入 扩展功能示例:图形用户界面 (GUI) 总结 引言 倒计时程序是一个非常常见的小工具,广泛用于各种应用场景中,例如考试时间提醒、烹饪计时器、会议倒计时等。Python 作为一种

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

LTspice模拟CCM和DCM模式的BUCK电路实验及参数计算

关于BUCK电路的原理可以参考硬件工程师炼成之路写的《 手撕Buck!Buck公式推导过程》.实验内容是将12V~5V的Buck电路仿真,要求纹波电压小于15mv. CCM和DCM的区别: CCM:在一个开关周期内,电感电流从不会到0. DCM:在开关周期内,电感电流总会到0. CCM模式Buck电路仿真: 在用LTspice模拟CCM电路时,MOS管驱动信号频率为100Khz,负载为10R(可自

【Spring boot】编写代码及测试用例入门之 Hello Spring boot _踩坑记

先贴下目录: 这是我从 start.spring.io 里下载的依赖Web的模板 // DemoApplication.javapackage com.abloume.springboot.blog.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autocon

HCIA--实验十:路由的递归特性

递归路由的理解 一、实验内容 1.需求/要求: 使用4台路由器,在AR1和AR4上分别配置一个LOOPBACK接口,根据路由的递归特性,写一系列的静态路由实现让1.1.1.1和4.4.4.4的双向通信。 二、实验过程 1.拓扑图: 2.步骤: (下列命令行可以直接复制在ensp) 1.如拓扑图所示,配置各路由器的基本信息: 各接口的ip地址及子网掩码,给AR1和AR4分别配置