汇编语言学习笔记四

这篇具有很好参考价值的文章主要介绍了汇编语言学习笔记四。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

字符

字符是以ASCII码的形式存储的,一个字符对应着8为二进制数,2位16进制数。
所以可以得到对应的字符地址。

assume ds:data
data segment
	db 'hello'
	db 'world'
data ends

and or指令

根据ASCII码,字符的大写和小写相差一个0010 0000,比如a对应的ASCII码是0110 0001,那么A则对应的是0100 0001,对比可以发现他们只是第5位不同,第5位为1,则是小写,否则是大写。
现在通过改变字符的大小写来熟悉and和or的用法,下面将HeLLo全变成小写,WorlD全变成大写。
and 是置0
or是置1

assume cs:code, ds:data
data segment
	db 'HeLLo'
	db 'WorlD'
data ends

code segment
start:
	mov ax, data
	mov ds, ax
	mov bx, 0
	mov cx, 5
	
s:
	mov ax, [bx]
	and ax, 11011111b;如果第5位为1的话,那么将其置为0,即将其变为大写
	mov [bx], ax;将ax存到[bx]对应的内存单元中,注意这里不是将其存到bx寄存器中

	mov ax, [5+bx]
	or ax, 00100000;如果第5位为0的话,那么将其置为1,即将其变为小写
	mov [5+bx], ax
	inc bx
	jmp s

code ends
end start

mov ax, [bx]放入ax中的是字节型数据。
mov ax, [bx+200]放入ax中的是字型数据。

寄存器SI和DI

SI和DI的功能和bx的功能类似,但这两个寄存器不能分为两个8位的寄存器来使用。
mov ax, [bx+di]或者mov ax, [bx+si]放入ax的是字型数据。
该指令也可以写成mov ax, [bx][di]

BX、SI、DI和BP寄存器

  1. 这四个寄存器都可以用[]这样的形式寻址。其余的ax、cx、dx以及ds都不能用来寻址。
  2. BX和BP只能选择一个和SI和DI搭配或者四个自己单独出现,并且SI和DI不能搭配。
  3. 使用BP时,默认的段地址在SS中。

特别补充

汇编语言学习笔记四
如图可见,其内存的物理地址为10000-10003H,地址信息也可以表示为1000: 0-1000: 3

assume cs:codeseg, ds:dataseg
dataseg segment
	db 23h, 11h, 22h, 66h
dataseg ends

codeseg segment
	mov ax, 1000h
	mov ds, ax
	mov bx, 0
	mov cx, 4
	mov ax, [bx]
	mov ax, [bx+1]
	mov ax, [bx+2]
	mov ax, [bx+3]
	
codeseg ends

end

执行下面四条语句时,对应的ax的值为0023h, 1123(字型数字,地址高位在前,低位在后), 2211, 6622
mov ax, [bx]
mov ax, [bx+1]
mov ax, [bx+2]
mov ax, [bx+3]

指令mov ax, [bx+si]以及mov ax, [bx,+si+10]和mov ax, [bx]都是类似的,特别注意的是这个字型数据,始终记住内存地址是以8位二进制数为刻度的,即偏移+1,内存中的数据的位数走8位文章来源地址https://www.toymoban.com/news/detail-435393.html

到了这里,关于汇编语言学习笔记四的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零学习开发一个RISC-V操作系统(四)丨RISC-V汇编语言编程

       本系列是博主参考B站课程学习开发一个RISC-V的操作系统的学习笔记,计划从RISC-V的底层汇编指令学起,结合C语言,在Ubuntu 20.04上开发一个简易的操作系统。一个目的是通过实践操作学习和了解什么是操作系统,第二个目的是为之后学习RISC-V的集成电路设计打下一定基础

    2024年01月25日
    浏览(55)
  • 汇编语言笔记(一)——汇编语言基础

    一、开发环境 我使用visual studio 2022 preview,其他版本的设置大同小异。 第一步: 打开visual studio,点击“创建新项目”: 第二步: visual studio并没有专门的汇编项目,所以需要挂羊头卖狗肉,选择C++空项目 第三步: 输入项目名称,点击创建 第四步: 鼠标右键单击项目名称—

    2024年02月05日
    浏览(40)
  • 汇编语言(Assembly Language)习题:键盘输入一个字符串,试将其中的小写字母转换为大写字母,其它字符保持不变。

    前置知识:汇编语言常用系统功能调用(如果懂直接跳过看题目详解) 格式: 功能:从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示。 格式: 功能:将DL寄存器中的字符送显示器显示,如果DL中为〈CTRL〉+〈BREAK〉的ASCII码,则退出。 格式: 功能:将DL寄存器中的字

    2024年02月03日
    浏览(75)
  • 汇编语言—常见汇编指令汇总

    mov    寄存器 ,数据                如:mov ax ,8 mov   寄存器,寄存器              如:mov ax,bx mov   寄存器,内存单元          如:mov ax,[0] mov   内存单元,寄存器          如:mov [0],ax mov   段寄存器,寄存器          如:mov ds,ax add   寄存器,数据

    2024年02月10日
    浏览(40)
  • 5.8 汇编语言:汇编高效除法运算

    通常情况下计算除法会使用 div/idiv 这两条指令,该指令分别用于计算无符号和有符号除法运算,但除法运算所需要耗费的时间非常多,大概需要比乘法运算多消耗10倍的CPU时钟,在Debug模式下,除法运算不会被优化,但Release模式下,除法运算指令会被特定的算法经过优化后转

    2024年02月11日
    浏览(41)
  • 5.6 汇编语言:汇编高效数组寻址

    数组和指针都是用来处理内存地址的操作,二者在C语言中可以互换使用。数组是相同数据类型的一组集合,这些数据在内存中是连续存储的,在C语言中可以定义一维、二维、甚至多维数组。多维数组在内存中也是连续存储的,只是数据的组织方式不同。在汇编语言中,实现

    2024年02月11日
    浏览(43)
  • 5.7 汇编语言:汇编高效乘法运算

    乘法指令是一种在CPU中实现的基本算术操作,用于计算两个数的乘积。在汇编语言中,乘法指令通常是通过 mul(无符号乘法) 和 imul(有符号乘法) 这两个指令实现的。由于乘法指令在执行时所消耗的时钟周期较多,所以编译器在优化代码时通常会尝试将乘法操作转换为更

    2024年02月11日
    浏览(36)
  • 汇编语言第一讲:计算机的组织架构和汇编语言介绍

    第一讲:计算机的组织架构和汇编语言介绍 汇编语言 计算机组织架构 数字电路 术语回顾 数制 数字电路 硬件电路 数字电路的问题 汇编语言的开始 程序的节(sections) 调用操作系统的系统调用 列出文件(Listing files) 汇编和链接 调试汇编程序 反汇编现有的程序 附录 课程资源

    2024年04月09日
    浏览(50)
  • 5.10 汇编语言:汇编过程与结构

    过程的实现离不开堆栈的应用,堆栈是一种后进先出 (LIFO) 的数据结构,最后压入栈的值总是最先被弹出,而新数值在执行压栈时总是被压入到栈的最顶端,栈主要功能是暂时存放数据和地址,通常用来保护断点和现场。 栈是由 CPU 管理的线性内存数组,它使用两个寄存器 (S

    2024年02月11日
    浏览(39)
  • 南京邮电大学汇编语言程序设计实验一(汇编语言语法练习与代码转换)

    排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可

    2024年02月08日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包