前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >8086汇编语言——操作内存中的数据

8086汇编语言——操作内存中的数据

作者头像
zy010101
发布2020-10-10 15:10:14
1K0
发布2020-10-10 15:10:14
举报
文章被收录于专栏:程序员程序员
代码语言:javascript
复制
;编程计算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            ;偏移地址
    mov dx,0                ;初始化dx
    mov ah,0                ;ah置为0
    mov al,[bx]             ;用al取出0000h:0000h单元一个字节的内容
    mov cx,3                ;循环3次
s:  add dx,ax               ;用16位寄存器来进行运算             
    loop s

    mov ax,4c00h
    int 21h
code ends
end

计算结果如下图所示:

AX中的数据乘以3刚好得到DX中的数据。60H*3H=120H

代码语言:javascript
复制
;Dos操作系统一般不会使用0:200-0:2ff这段内存空间
;编程,向内存0:200-0:23F依次传送数据0-63
;8086的地址组成方式导致实际物理地址可以由不同的段地址和偏移地址构成。
;所以我们处理上述地址为"20h:0-20h:3fh",它和0:200-0:23F描述的是相同的地址
assume cs:code
code segment
    mov ax,20h
    mov ds,ax           ;段地址
    mov ax,0            ;初始化ax
    mov bx,0h           ;偏移地址
    mov cx,64           ;循环64次
s:  mov [bx],ax         ;给内存单元赋值
    inc ax
    inc bx
    loop s

    mov ax,4c00h
    int 21h
code ends
end

写入数据结果如下:

代码语言:javascript
复制
;这是在上面的程序的基础上做了一个要求,这个要求是程序只能有9条指令。
;这9条指令还需要包括mov ax,4c00h和int 21h
;编程,向内存0:200-0:23F依次传送数据0-63,只能使用9条指令。
;经过观察可以得出,ax和bx的变化是同步的,所以可以不使用ax。减少2条指令以后
assume cs:code
code segment
    mov ax,20h
    mov ds,ax
    mov bx,0h
    mov cx,64
s:  mov [bx],bx
    inc bx
    loop s

    mov ax,4c00h
    int 21h
code ends
end
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档