2021-4-20字符串的定义

字符串的定义

  • mov ax,“he”

编译之后将字符串对应的assic码——>转换为16进制,再存到寄存器中。

“he”——>06865h
68——>h 65——>e
寄存器中高位 存放 高数据(68)

1、cs和ip(段寄存器)结合在一起代表当前代码所对应的内存地址。
2、字符串在内存中显示为逆序。
3、每个寄存器(16位)只能存放2B即2个字节,不能完整输出hello,需要将“ll”值给其他寄存器
4、无法获取数据地址,不能对字符串进行修改。

解决上述问题(另外一种方式定义字符串)

  • 首先需在内存中申请一块空间,可以使用伪指令db和dw
    db——>define byte;定义字节
    dw——>define word;定义字(16位的cpu为2字节)

  • 例如
    db 1,2,3; 占用3B内存,且顺序为正序,地址从小到打依次存储1,2,3
    dw 1,2,3;占用6B内存

db “hello”;每个字符开辟一个字节
dw “hello”;开辟的内存空间必须是字长的整数倍,6B,最后使用0补齐

获取字符串

  • 定义字符串时标记字符串
    例:
    str dw “hello”;伪指令
    start: //程序入口(才不会处理伪指令),指令开始的位置start为变量名
    mov ax,str;指令
    end start

mov ax,str并未将字符串"hello"赋值给ax寄存器,而是将字符串在内存中的偏移地址赋值给ax
将DS内数值当作段地址,与偏移地址结合得到字符串内存地址

  • 如何获取段地址
    – 方法1:直接从内存中找(仅限调试阶段)
    – 方法2:使用段进行包裹,段可以提供一个段地址
    data segment;data也为标记名(段的名称)
    str dw “hello”
    data ends
    start:
    mov ax,str;指令
    end start

data segment
str dw “hello”
data ends
start:
mov ax,data
mov ds,ax;
mov ax,str
end start

可通过段的名称=data获取其中包裹数据对应的段地址。
然后再将真实的段地址赋值给ds,然后在将str读取到(注意寄存器只能显示2B,且是地位)

ds data (segment数据段寄存器)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值