weixin_48362397 2021-06-03 16:39 采纳率: 33.3%
浏览 9

汇编语言:mov bl,[bx]那一小段,为什么就能找到str1的偏移地址呢,详细一点

datasg SEGMENT 
    str1 db 11,10 dup(?);11缓冲区容量,10为最大元素个数
    str2 db 'Enter a string:$'
datasg ENDS

stacksg segment stack
    db 128 dup (?)
stacksg ends

code segment
    assume cs:code, ss:stacksg,ds:datasg
START:
    MOV AX,datasg
    mov ds,ax
    mov ax,stacksg
    mov ss,ax
    
    mov dx,offset str2
    mov ah,9
    int 21h 

    mov dx,offset str1
    mov ah,10
    int 21h

    mov dl,10
    mov ah,2
    int 21h
    
    mov dl,13
    mov ah,2
    int 21h

    mov bx,1
    mov bl,[bx]
    add bl,2
    mov bh,0
    mov byte ptr [bx],'$'

    mov dx,2
    mov ah,9
    int 21h  
 
    MOV AH,4CH
    INT 21H
CODE ENDS
END START

 

 

  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-17 13:47
    关注

    参考GPT和自己的思路:

    首先,指令mov bl,[bx]是将存储在BX所指向的内存地址处的1个字节数据读取到BL寄存器中。因此,这个指令的作用是将[bx]处存储的数据(即str1数组的第一个元素的值)读出来。

    在这个程序中,当执行到第34行时,BX寄存器的值为1,因此指令mov bl,[bx]将读取[1]处存储的数据。由于str1数组是程序中唯一一个存储字符串的数据,因此可以推断出[1]实际上是str1的偏移地址。

    需要注意的是,偏移地址并不是数组中第一个元素的下标,而是数组的起始地址在数据段中的偏移量。在这个程序中,由于str1是定义在数据段中,所以它的偏移地址即为它在数据段中的地址。这样一来,通过将偏移地址存储在BX寄存器中,就可以直接访问str1数组中各个元素的内容。

    评论

报告相同问题?

悬赏问题

  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数