. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第6章 试验5.5实现代码  [待解决] 回复[ 1次 ]   点击[ 533次 ]  
ruder
[帖 主]   [ 发表时间:2013-05-05 10:26 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-01-02 12:37
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:
    mov ax, c                   ; c段的段地址存储在es里
    mov es, ax
    
    xor bx, bx                  ; 设定好遍历基址和次数
    mov cx, 8
again:
    mov ax, a                   ; 取出a段中的字节
    mov ds, ax
    mov dl, ds:[bx]

    mov ax, b                   ; 取出b段中的字节并相加
    mov ds, ax
    add dl, ds:[bx]

    mov es:[bx], dl             ; 相加结果存储到c段里

    inc bx                      ; 继续遍历
    loop again

    mov ax, 4c00h
    int 21h
code ends

end start
nohackxu
[第1楼]   [ 回复时间:2018-06-11 16:01 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-07-05 11:21
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:
        mov ax,a
        mov ds,ax
        
        mov dx,0
        mov bx,0
        mov cx,8
s:
        ; 从偏移0开始,依次往后加1
        mov dl,ds:[0+bx]
        add dl,ds:[16+bx]
        mov ds:[32+bx],dl
        inc bx
        loop s
        
        mov ax,4c00h
        int 21h
        
code ends

end start
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved