实验2 多个逻辑段的汇编源程序编写与调试

    

 

 

     

 

 

     

 

 

 

     

 

 

                          16*⌈N/16⌉(向上取整)

 

 

   只有task_4可以运行。不写 start,程序从头开始执行。写了 start,程序从 start:标号处开始执行。上述4个任务只有task4是已代码段开头的,所以程序仍能运行,其他则会出错。

 

 

   

          

 

 

 

  

 代码实现:

assume cs:code
data1 segment
    db 50, 48, 50, 50, 0, 48, 49, 0, 48, 49
data1 ends

data2 segment
    db 0, 0, 0, 0, 47, 0, 0, 47, 0, 0  
data2 ends

data3 segment
    db 16 dup(0)
data3 ends

code segment
start:
    mov ax,data1
    mov ds,ax
    mov bx,0
    mov cx,10
  s:mov ax,[bx]
    add ax,[bx+16]
    mov [bx+32],ax
    inc bx
    loop s

    mov ah,4ch
    int 21h
code ends
end start

调试:

   

       data1 data2相加后结果成功保存在data3中

 

 

 

 

代码实现:

assume cs:code

data1 segment
    dw 2, 0, 4, 9, 2, 0, 1, 9
data1 ends 

data2 segment
    dw 8 dup(?)
data2 ends

code segment
start:
    mov ax,data1
    mov ds,ax
    mov ax,data2
    mov ss,ax
    mov sp,16
    mov cx,8
    mov bx,0
  s:push [bx]
    add bx,2
    loop s
    mov ah, 4ch
    int 21h
code ends
end start

 

 

 

 成功将data1中的八个字段逆序存储到逻辑段b中。

 

 

         

 

 

         

 

 

 

 

 

     0DFh(1101 1111) 相与后al第三位变为0,相当于-32,在程序中的作用为将大写字母变为小写

 

                 

    由此可知 这些数值用于改变颜色。

 

代码实现:

assume cs:code, ds:data

data segment
    db 'Pink Floyd      '
    db 'JOAN Baez       '
    db 'NEIL Young      '
    db 'Joan Lennon     '
data ends

code segment
start:
   mov ax,data
   mov ds,ax
   mov bx,0
   mov cx,4
   
  s:mov ax,[bx]
    or ax,20h
    mov [bx],ax
    add bx,16
    loop s

   mov ah, 4ch
   int 21h
code ends
end start

调试:

        

 

    成功将每一行单词首字母从大写转为小写

 

代码实现:

assume cs:code, ds:data, es:table

data segment
    db '1975', '1976', '1977', '1978', '1979' 
    dw  16, 22, 382, 1356, 2390
    dw  3, 7, 9, 13, 28 
data ends

table segment
    db 5 dup( 16 dup(' ') )  ;
table ends

code segment
start:

    mov ax,data
    mov ds,ax
    mov ax,table
    mov es,ax
    mov bx,0
    mov bp,0
    mov cx,5

  y:mov ax,[bx]
    mov es:[bp],ax
    mov ax,[bx+2]
    mov es:[bp+2],ax
    add bx,4
    add bp,16
    loop y

    mov bp,5
    mov cx,5

  i:mov ax,[bx]
    mov es:[bp],ax
    add bp,16
    add bx,2
    loop i
 
    mov bp,10
    mov cx,5

  p:mov ax,[bx]
    mov es:[bp],ax
    add bp,16
    add bx,2
    loop p

    mov bp,5
    mov cx,5

  a:mov ax,es:[bp]
    mov bl,es:[bp+5]
    div bl
    mov es:[bp+8],al
    add bp,16
    loop a


    mov ah, 4ch
    int 21h
code ends
end start

调试:

   

 

   成功将data中的数据按要求结构化到逻辑段table中

 

posted @ 2021-11-12 00:37  melons  阅读(30)  评论(3编辑  收藏  举报