Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >8086汇编语言——处理字符串

8086汇编语言——处理字符串

作者头像
zy010101
发布于 2020-10-10 07:13:31
发布于 2020-10-10 07:13:31
86600
代码可运行
举报
文章被收录于专栏:程序员程序员
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
;'basic'转成大写'BASIC'
;'ASM'转成小写'asm'
assume cs:code
data segment
    db 'basic'
    db 'ASM'
data ends
code segment
start:  mov ax,data
        mov ds,ax       ;设置ds指向data
        mov bx,0        ;设置偏移地址
        mov cx,5        ;循环5s1:  mov al,[bx]
        and al,11011111B    ;将字符从小写变成大写,(ASCII的第五个位置变成0即可)
        mov [bx],al     ;把字符写回到内存单元
        inc bx          ;处理下一个字母
        loop s1

        mov cx,3
   s2:  mov al,[bx]         ;处理'ASM'字符串
        or al,00100000B     ;将字符从大写变成小写 (ASCII的第五个位置变成1即可)
        mov [bx],al
        inc bx
        loop s2

        mov ax,4c00h
        int 21h
code ends
end start

结果如下图所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
;本例中,我们做一个类似数组的操作。
;'basic'转成大写'BASIC'
;'LINUX'转成小写'linux'
assume cs:code
data segment
    db 'basic'
    db 'LINUX'
data ends
code segment
start:  mov ax,data
        mov ds,ax
        mov bx,0
        mov cx,5
    s:  mov al,0[bx]        ;处理第一行,0[bx]==[bx+0]=[bx]
        and al,11011111B    ;将字符从小写变成大写,(ASCII的第五个位置变成0即可)    
        mov 0[bx],al

        mov al,5[bx]        ;处理第二行,5[bx]=[bx+5]
        or al,00100000B     ;将字符从大写变成小写 (ASCII的第五个位置变成1即可)    
        mov 5[bx],al

        inc bx
        loop s

        mov ax,4c00h
        int 21h
code ends
end start

结果如下所示:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
x86汇编语言之大小写快速转换
分析 大写字母 abcd对应的ascii码以及二进制: A 41H 0100 0001B B 42H 0100 0010B C 43H 0100 0011B D 44H 0100 0100B 小写字母 abcd对应的ascii码以及二进制: a 61H 0110 0001B b 62H 0110 0010B c 63H 0110 0011B d 64H 0110 0100B 发现规律 大写转小写,只需二进制和0010 0000B进行或运算即可: or 0010 0000B ;
乱码三千
2021/08/24
1K0
(七)汇编语言——更灵活的定位内存地址的方法
        我们只需要知道,这三种写法的效果是相同的就行,因为这三个寄存器的作用是相似的。
小点点
2023/01/07
5660
(七)汇编语言——更灵活的定位内存地址的方法
8086汇编语言——双层循环的使用
;编程,将data段的每个单词的前四个字母改写为大写。 assume cs:code stack segment dw 10 dup(10) stack ends data segment db '1. display ' db '2. brows ' db '3. replace ' db '4. modify ' data ends code segment start: mov ax,stack m
zy010101
2020/10/10
1.1K0
8086汇编语言——双层循环的使用
内存寻址方式
在处理汇编语言程序中,用'.......'的方式指明数据是以字符的形式给出的 编译器将他们转化为他们对应的ascii码 通过ascii码表我们可以发现同一个大写和小写字符相差20h
用户7272142
2023/11/24
2610
内存寻址方式
【汇编语言】更灵活的定位内存地址的方法(一)—— 字符操作:and与or指令、ASCII码及大小写转换
前面,我们用[0]、[bx]的方法,在访问内存的指令中,定位内存单元的地址。本章我们主要通过具体的问题来讲解一些更灵活的定位内存地址的方法和相关的编程方法。我们的讲解将通过具体的问题来进行。
Crossoads
2024/11/21
1500
【汇编语言】更灵活的定位内存地址的方法(一)—— 字符操作:and与or指令、ASCII码及大小写转换
8086汇编语言——向显示缓冲区中写入数据
注意这段代码请不要Debug,直接运行即可。结果如下所示:最后一行的效果是闪烁显示。
zy010101
2020/10/10
1.4K0
8086汇编语言——向显示缓冲区中写入数据
【汇编】(八)更灵活的定位内存地址的方法
前面,我们用 [0]、[bx] 的方法,在访问内存的指令中,定位内存单元的地址。在这一篇博文中,我们主要讲解一些更灵活的定位内存地址的方法和相关的编程方法。  
sidiot
2023/08/31
3140
8086汇编语言之各个通用寄存器的作用
1. asm编译器无法识别中括号,mov ax,[0]编译时会默认去除中括号.使用bx替代可以解决这个问题,如果在debug模式下使用-a命令输入中括号则没有问题,可以正常识别
乱码三千
2021/08/24
1.2K0
【汇编语言】更灵活的定位内存地址的方法(二)—— 从 [bx+idata] 到 [bx+si+idata]:让你灵活的访问内存
在前面,我们用[bx]的方式来指明一个内存单元,还可以用一种更为灵活的方式来指明内存单元:[bx+idata]表示一个内存单元,它的偏移地址为(bx)+idata(bx 中的数值加上idata)。
Crossoads
2024/11/21
990
【汇编语言】更灵活的定位内存地址的方法(三)—— 不同的寻址方式的灵活应用
如果我们比较一下前面用到的几种定位内存地址的方法(可称为寻址方式),就可以发现有以下几种方式:
Crossoads
2024/11/21
1260
【汇编语言】更灵活的定位内存地址的方法(三)—— 不同的寻址方式的灵活应用
汇编语言篇——顺序程序、循环程序设计
2、下面的程序的功能时将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序,上机调试,跟踪运行结果。
会洗碗的CV工程师
2023/11/30
4570
汇编语言篇——顺序程序、循环程序设计
汇编语言_汇编语言程序
开头和结尾的两句代表伪指令 只有编译器可以读懂 汇编指令可以被翻译为机器码最终被cpu执行 汇编程序 就是包含汇编指令和伪指令的文本 mov ax,4c00h int 21h 跟C语言程序的return 0一样 返回控制权 一个汇编程序是由多个段组成的 这些段被用作各种空间来使用 一个有意义的汇编程序至少需要一个段 且每个段都需要段名 段名 segment--段的开始 段名 ends--段的结束 assume假设 含义是假设某一段寄存器和程序中我们定义的段名关联起来 可以理解为和变量的引用一个意思
用户7272142
2023/11/14
2790
汇编语言_汇编语言程序
汇编基础
​ cup与所有内存之间:地址总线,数据总线,控制总线,每条线对应不同信息,指令与数据分开
Dean0731
2020/08/17
1.5K0
(六)汇编语言——包含多个段的程序
目录 使用数据 使用栈 分段  代码 总结 ---- 使用数据         首先,我们来看一个问题,就是编程计算0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H的和,结果存在ax寄存器中。看起来还是比较简单的,用简单的加法指令可以完成,但是这样会有一个问题,就是我们的程序和代码就是混在一起的,不仅导致程序混乱,也让人难以理解。         我们在使用C语言的时候,知道可以定义一个数组来解决这样的问题,但是在汇编中也没有数组啊,这可怎么办,别急,我们
小点点
2023/01/01
4290
(六)汇编语言——包含多个段的程序
【汇编语言】int指令(一)—— 中断与栈的联动机制:透视int与iret的核心原理
中断信息可以来自CPU的内部和外部,当CPU的内部有需要处理的事情发生的时候,将产生需要马上处理的中断信息,引发中断过程。在前面一个章节中,我们讲解了中断过程和两种内中断的处理。
Crossoads
2024/12/29
1860
【汇编语言】int指令(一)—— 中断与栈的联动机制:透视int与iret的核心原理
8086汇编语言之函数的声明和调用
由于print函数默认执行,为了保证在call时才执行, 咱们将print函数代码移至中断后:
乱码三千
2021/08/24
1.6K0
x86汇编语言之8086语法和指令集
上面使用db或者dw定义数据的方式,定义数据的同时就已经定义好了数据所在的物理地址, 如果我们想要从指定的内存地址中写入或者读取数据的话,需要借助段寄存器来实现 在8086中给我们提供了DS SS CS ES四个寄存器,理论上你使用哪一个都行,但是由于系统默认读取DS寄存器中的数据当做段地址,所以我们一般使用DS进行数据的段地址管理
乱码三千
2021/08/24
2.7K0
8086汇编语言——操作内存中的数据
;编程计算0000h:0000h内存单元中数据乘以3的结果,结果保存在dx中。 ;本次计算的一个字节单元中的数据,它是8位的。所以需要使用8位的寄存器取值。 ;这个内存单元中的数据最大可能是255,255×3的结果会超出8位,所以运算的时候,需采用16位寄存器。 ;当然,最终结果也要保存在16位寄存器之中。 assume cs:code code segment mov ax,0000h mov ds,ax ;段地址 mov bx,0000h
zy010101
2020/10/10
1.1K0
8086汇编语言——操作内存中的数据
x86汇编语言之DI和SI寄存器
SI(source index)是源变址寄存器 DI(destination index)是目的变址寄存器 它们和[bx]类似,用于存放偏移地址
乱码三千
2021/08/24
2.2K0
Mac下写8086汇编
我们课上讲的是8086下的16位汇编,如此远古的操作系统导致我在配置环境时遇到了很多问题。起初打算在win7虚拟机下用masm和汇编ide写汇编,但编译不成功,因为masm新版已经不是16位了。据查,masm5.0版本支持16位汇编,但又发现了DOSBox,与其在win7虚拟机下模拟DOS,不如直接在Mac中运行DOS环境。
gojam
2019/05/14
2.6K0
推荐阅读
相关推荐
x86汇编语言之大小写快速转换
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档