汇编基础 笔记5(《汇编语言》第七章)

本文介绍了汇编语言中更灵活的内存定位方法,包括使用and和or指令设置位,以及R命令分析内存段地址。通过实例展示了如何在汇编中定位字符串,对比了C语言与汇编定位字符的不同。同时,提到了8086CPU中的SI和DI寄存器在数组操作中的应用,并给出了一段大小写转换的实验代码,演示了栈在二重循环中的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

========================================

更灵活的定位内存地址的方法和相关编程方法

========================================

and:将相应位设为1,其它位不变

or:将相应位设为0,其它位不变

-----------------------------------

用R命令分析下列程序data段的地址:

assume ds:data 

data segment 

        db 'unIX' 

        db 'foRK' 

data ends 

code segment 

start:  mov al,'a' 

        mov bl,'b' 

        mov ax,4c00h 

        int 21h 

code ends 

end start 

 

-r:ds=0b2d

则,程序从0b3dh段开始(别忘了psp前缀占了256个字节=100h,段地址的话就是10h)

data段是程序中的第一个段,它就在程序的起始处,所以它的段地址为0b3dh

----------------------------------------

----------------------------------------

[bx+idata]:

-----------

(ax)=((ds)*16+(bx)+200)

mov ax,[bx+200]

mov ax,[200+bx]

mov ax,200[bx]

mov ax,[bx].200

-------------------------

比较c和汇编语言定位字符串中字符的方式:

c: a[i],b[i]

汇编: 0[bx],5[bx]

[bx+idata]为高级语言实现数组提供了便利机制

=======================================

SI和DI是8086cpu中和bx功能相近的寄存器

但它们不能够分成两个8位寄存器

=======================================

实验六(2)

assume cs:codesg,ss:stacksg,ds:datasg

stacksg segment

        dw 0,0,0,0,0,0,0,0

stacksg ends

datasg segment

        db '1. display      '

        db '2. brows        '

        db '3. replace      '

        db '4. modify       '

datasg ends

codesg segment

start:  mov ax,stacksg

        mov ss,ax

        mov sp,16

        mov ax, datasg

        mov ds,ax

        mov bx,3

        mov cx,4

      s:push cx

        mov si,0

        mov cx,4

        s0:mov al,[bx][si]

           and al,11011111b

           mov [bx][si],al

           inc si

           loop s0

        add bx,16

        pop cx

        loop s

        mov ax,4c00h

        int 21h

codesg ends

end start

--------------------------------------

大小写转换的方法

二重循环

二重循环中栈的应用

=======================================

=======================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值