汇编语言学习-包含多个段的程序


在代码段中使用数据

代码结构

assume cs:code
code segment
      ··
      ··
      数据
      ··
      ··
start:
      ··
      ··
      代码
      ··
      ··
code ends

end start

在代码段中使用栈

代码结构跟上面的差不多,就是要在start中初始化段指针(SS\SP)

将数据、代码、栈放入不同的段

代码结构

assume cs:code, ds:data, ss:stack

data segment
    ··
data ends

stack segment
    ··
stack ends


code segment
start:
      ··
      ··
      代码
      ··
      ··
code ends

end start

结构是这个结构,但是在代码段中,仍然需要使用初始化指令来将相应的ds\ss\sp寄存器初始化才可以。总而言之,cpu到底如何处理我们定义的段的中的内容,是当作指令执行,还是当作数据访问,还是当作栈空间,完全是靠程序中具体的汇编指令,和汇编指令对cs:ip、ss:sp、ds等寄存器的设置来决定的。

实验

前面几个都是给出程序来调试观察的。就不列举出来了

5

编写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

;把a 、b段中的数据相加,结果存储到c段当中
code segment

start: mov ax,a
    mov ds,ax
    
    mov ax,b
    mov es,ax

  mov ax,c
  mov ss,ax
  mov sp,8
    
    mov bx,0
    mov cx,7 ;方法1


; 这样的话解决不了最后08+08的情况, 栈顶指针刚好是0001-> FFFF 这样10放高地址就恰好被溢出了。
; 所以我觉得,还有一种方式是最后一个元素,用al,其他的用ah, 按照栈元素来说,这样做的是对的

; 代做: 这样做很麻烦倒是,更好的方式应该是分别计算两个字节的,然后组成一个字,同时push进去,这样的话就不用处理最后一个栈顶元素的问题了
; 方法1-------是个错误的方法,解决不了栈顶最初始的元素
s: mov ah,ds:[bx]
  add ah,es:[bx]
  push ax
  add sp,1
;    mov c:[bx],al
  inc bx
  loop s

;处理最后一个元素
    mov al,ds:[bx]
    add al,es:[bx]
    push ax

;方法二------推荐--正确
    ; mov cx,4 ;方法2
; s: mov ah,ds:[bx]
;    add ah,es:[bx]
;    add bx,1   

;    mov al,ds:[bx]
;    add al,es:[bx]
;    add bx,1

;    push ax
;    loop s

    mov ax,4c00h
    int 21h

code ends

end start

6

编写code中的代码,用push指令将a段中的前八个字型数据,逆序存储到b段中。

assume cs:code

a segment
    dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh
a ends

b segment
    dw 0,0,0,0,0,0,0,0
b ends

code segment

start: mov ax,b
    mov ss,ax
    mov sp,10h;8个字型数据,栈顶指针的大小应该是10h哦!
    
    mov ax,a
    mov es,ax
    
    mov bx,0
    mov cx,8

s: push es:[bx]
    add bx,2;bx这里要自增2哦!
    loop s

    mov ax,4c00h
    int 21h

code ends
end start

文章作者: 美食家李老叭
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 美食家李老叭 !
评论
  目录