zoukankan      html  css  js  c++  java
  • 编程:将a段和b段中的数据依次相加,保存在c段

        编程:编写code段中的代码,将a段和b段中的数据依次相加,保存在c段。

    assume cs:code
    a segment
       db 1,2,3,4,5,6,7,8
    a ends
    b segment
       db 1,2,3,4,5,6,7,8
    b ends
    c segment
       db 0,0,0,0,0,0,0,0
    c ends
    code segment
    start:
          ?
    code ends
    end start

    程序如下:

    ;将a段和b段的数据依次相加,将结果存入到c段中
    assume cs:code
    a segment
     db 1,2,3,4,5,6,7,8
    a ends
    
    b segment
     db 1,2,3,4,5,6,7,8
    b ends
    cc segment
        db 0,0,0,0,0,0,0,0
    cc ends
    
    code segment
    start:    mov ax,a
             mov ds,ax
             mov si,0
             mov cx,8
          s: mov ax,0
             add al,[0+si]
             add al,[16+si]
             mov [32+si],al
             inc si
             loop s
            
            mov ax,4c00h
           int 21h
           
     code ends
     end start

     在masmplus中 c segment 编译有问题,改为cc segment 就可以了,不知为什么。

    这个程序关键是调试查看数据:

    用debug将程序加载进内存后,r查看没执行指令的情况。其中

     ss=DS+10h; 

    程序加载后,ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为0则程序所在内存区的地址为ds:0

    这个内存区的前256个字节存放的是psp,dos用来和程序通信。所以程序的物理地址为:

       ds+10h;

    cs和ss的差值为什么为3? 

    是因为程序定义了3个段,定义的三个段的大小都小于16个字节。

    若是在c段后面再定义一个段

    d segment 
    db 16 dup(1)
    d ends

    ss=14a5,cs=14a9

    d segment
    db 17 dup(1)
    d ends

    ss=14a5 ,cs=14aa

    查看最终结果:

    g运行完程序, d ss:0在查看段的内容。

  • 相关阅读:
    python定义函数时的默认返回值
    【UNIX网络编程】配置unp.h和apueerror.h
    【UNIX网络编程】套接字编程简介
    【UNIX网络编程】概述
    【VSCode】Ubuntu下VSC编译运行c++程序
    【UNIX网络编程】传输层:TCP、UDP和SCTP
    nginx跨域配置
    centOS7.*安装nginx和简单使用
    nginx日志切割
    nginx静态资源防盗链
  • 原文地址:https://www.cnblogs.com/youxin/p/2532228.html
Copyright © 2011-2022 走看看