太残暴了 发表于 2020-5-1 17:15:55

实验5(5)(6)以及相关问题

5.(5)
程序:
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
      mov ss,ax
          mov sp,10h
          
          mov dx,0
          mov bx,0
          mov cx,8
s:mov ax,a
    mov ds,ax
    push ds:
        mov ax,b
    mov ds,ax
    pop dx
    add dl,ds:
    push dx
        pop ss:
    inc bx
        loop s
       
        mov ax,4c00h
        int 21h
       
       
        code ends
        end start       



程序逻辑:
题目要求将a,b相加的结果依次放入c中

将c作为栈段处理。

先将a中的【bx】处数据进栈,然后出栈放入dx中(当然,也可以省去进栈直接将其放入dx中)。

然后将ds换到b数据段。dx中的数据与ds:【bx】相加,这时候dx中存储着得到的a,b对应中数据之和,接下来就是想办法将其放入c中(栈段也可以同时被当作数据段来存储数据,但要注意数据是否会被覆盖,因为这个程序仅仅需要用到靠近栈底的一个字的空间来临时存储进出栈的数据,所以完全可以将其余未用到的存储单元当作数据段处理)

将dx入栈

出栈到ss:













(6)
程序:
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,0,0,0,0,0,0,0,0

b ends

code segment

start:mov ax,b
      mov ss,ax
          mov sp,020h
          mov ax,a
          mov ds,ax
          
          mov bx,0
          mov cx,16
       s:push
       add bx,2
       loop s
      
        mov ax,4c00h
        int21h
       
code ends

end start










xiagm 发表于 2022-2-9 16:52:02

很不错,就是题目要求a段前 八个字,mov sp,020h,mov cx,16中的020h和16应该要调整。
页: [1]
查看完整版本: 实验5(5)(6)以及相关问题