实验二

实验任务1

任务1-1

 

 ① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 076A, 寄存器(SS) = 076B, 寄存器(CS) =076C 

 ② 假设程序加载后,code段的段地址是X,则,data段的段地址是X-12H, stack的段地址是X-3H。

任务1-2

① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 076A, 寄存器(SS) = 076B, 寄存器(CS) =076C 

② 假设程序加载后,code段的段地址是X,则,data段的段地址是X-12H, stack的段地址是X-3H。

任务1-3

① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 076A, 寄存器(SS) = 076C, 寄存器(CS) =076E 

② 假设程序加载后,code段的段地址是X,则,data段的段地址是X-14H, stack的段地址是X-5H。

任务1-4

① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 076C, 寄存器(SS) = 076E, 寄存器(CS) =076A 

② 假设程序加载后,code段的段地址是X,则,data段的段地址是X-10H, stack的段地址是X-1H。

任务1-5

① 对于如下定义的段,程序加载后,实际分配给该段的内存空间大小是 ((N-1)/16+1)*16字节。

② 如果将程序task1_1.asm, task1_2.asm, task1_3.asm, task1_4.asm中,伪指令 end start 改成 end , 哪一个程序仍然可以正确执行?结合实践观察得到的结论,分析、说明原因。

task1_1.asm

task1_2.asm

task1_3.asm

task1_4.asm

 

 只有task1_4可以正常运行,在汇编语言中start既可以作为标号也可以作为程序入口,而end start的作用就是提示程序入口在何处。若程序的第一条指令就是程序的入口,则start可以缺省。若最后缺少start,则会引起系统调用时不知道程序的入口在何处,从第一条指令开始执行,而在这种情况下,只有task1_4符合。

 

实验2

代码:

assume cs:codesg
codesg segment
start:mov ax,0b800h
        mov ds,ax
        mov cx,80
        mov bx,0f00h
   s:   mov ax,403h
        mov [bx],ax
        add bx,2
        loop s
        mov ax,4c00h
        int 21h
codesg ends
end
         

 

实验3

加载、反汇编:

 

运行前:

 

 

 调试:

 

 运行后:

 

 代码:

assume cs:code,ds:data1
data1 segment
    db 50, 48, 50, 50, 0, 48, 49, 0, 48, 49 ; ten numbers
data1 ends

data2 segment
    db 0, 0, 0, 0, 47, 0, 0, 47, 0, 0       ; ten numbers
data2 ends

data3 segment
    db 16 dup(0)
data3 ends

code segment
start:mov ax,data1
        mov ds,ax
        mov cx,10
        mov si,0
   s:   mov al,[si]
        add ax,[16+si]
        mov [32+si],al
        inc si
        loop s
        mov ax,4c00h
        int 21h
code ends
end start

 

实验4

 

 运行后:

 

 

assume cs:code,ds:data1

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

data2 segment
    dw 8 dup(0)
data2 ends

code segment
start:mov ax,data1
        mov ds,ax
        mov si,0
        mov bx,14
        mov cx,8
   s:   mov ax,[bx]
        mov [16+si],ax
        inc si
        inc si
        dec bx
        dec bx
        loop s 
        mov ah, 4ch
        int 21h
code ends
end start

 

实验5

代码:

assume cs:code, ds:data
data segment
        db 'Nuist'
        db 2, 3, 4, 5, 6
data ends

code segment
start:
        mov ax, data
        mov ds, ax

        mov ax, 0b800H
        mov es, ax

        mov cx, 5
        mov si, 0
        mov di, 0f00h
s:      mov al, [si]
        and al, 0dfh
        mov es:[di], al
        mov al, [5+si]
        mov es:[di+1], al
        inc si
        add di, 2
        loop s

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

反汇编:

运行结果:

 

修改后运行结果:

line19的作用:将字母大写

line4的字节数据的用途:操控显示字母的颜色

 

实验6

代码:

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 si,0
        mov dl,20h
        or [si],dl
        or [si+16],dl
        or [si+32],dl
        or [si+48],dl
        mov ah, 4ch
        int 21h
code ends
end start

 

加载:

 

 反汇编:

调试:

 

 

实验7

代码:

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 cx,5
          mov bx,0
          mov si,0
  s:      mov ax,[bx]
          mov es:[si],ax
          mov ax,[bx+2]
          mov es:[si+2],ax
          add si,16
          add bx,4
          loop s
          mov bx,20
          mov cx,5
          mov si,0
          mov di,0
   s1:    mov dx,0
          mov es:[di+7],dx
          mov ax,[bx+si]
          mov es:[di+5],ax
          div word ptr [bx+10+si]
          mov es:[di+13],ax
          mov ax,[bx+10+si]
          mov es:[di+10],ax
          add di,16
          add si,2
          loop s1
          mov ah, 4ch
          int 21h
code ends
end start

table原始数据:

 

 

table运行后数据:

 

 

 实验总结

   本次实验主要研究的对象为程序的各个段的使用及各种寻址方法,较之前次实验也多使用了几个寄存器。同时,对汇编代码中的伪指令、标记等的用途也有了更深层次的理解。

posted @ 2021-11-09 11:33  随影ys  阅读(48)  评论(2)    收藏  举报