whiteblossoms

导航

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

实验任务一

  • 任务1-1
    • 对程序task1_1.asm进行汇编、连接,用debug加载、跟踪调试,基于结果,回答问题。

      ① ds=076A ss=076B cs=076C
      ② 假设程序加载后,code 段的段地址是X ,则,data 段的段地址是X-2,stack 的段地址是X-1

  • 任务1-2
    • 对程序task1_2.asm进行汇编、连接,用debug加载、跟踪调试,基于结果,回答问题。

      ① ds=076A ss=076B cs=076C
      ② 假设程序加载后,code 段的段地址是X ,则,data 段的段地址是X-2,stack 的段地址是X-1

  • 任务1-3
    • 对程序task1_3.asm进行汇编、连接,用debug加载、跟踪调试,基于结果,回答问题。

      ① ds=076A ss=076C cs=076E
      ② 假设程序加载后,code 段的段地址是X ,则,data 段的段地址是X-4,stack 的段地址是X-2

  • 任务1-4
    • 对程序task1_4.asm进行汇编、连接,用debug加载、跟踪调试,基于结果,回答问题。

      ① ds=076C ss=076E cs=076A
      ② 假设程序加载后,code 段的段地址是X ,则,data 段的段地址是X+2,stack 的段地址是X+4

  • 任务1-5
    • 基于上述四个实验任务的实践、观察,总结并回答:
      ① 对于如下定义的段,程序加载后,实际分配给该段的内存空间大小是 N/16 向上取整
      end start改为end




      task1_4可以正常执行,因为其code段定义在最前,而去掉之前end start明确程序入口是start处,去掉之后前三个文件数据段定义在代码段前无法找到

实验任务二

编写一个汇编源程序,实现向内存单元b800:0f00 ~ b800:0f9f连续160字节,依次重复填充十六进制数据03 04。

  • 代码
    assume cs:code
    
    code segment
    start:
    	mov ax,0b800h
    	mov ds,ax
    	mov bx,0f00h
    	mov cx,160
    	mov ax,0403h
    	s:mov [bx],ax
    	inc bx
    	inc bx
    	loop s
    	mov ax,4c00h
    	int 21h
    code ends
    end start
    

实验任务三

  • 代码
assume cs:code
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 cx,10
	mov bx,0
	s: mov dx,0
	mov ax,data1
	mov ds,ax
	add dx,[bx]
	mov ax,data2
	mov ds,ax
	add dx,[bx]
	mov ax,data3
	mov ds,ax
	mov [bx],dx
	inc bx
	loop s
	mov ax,4c00h
	int 21h
code ends
end start



实验任务4

代码:

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 cx,8
	mov ax,data2
	mov ss,ax
	mov sp,16
	mov bx,0
	s:
	push [bx]
	add bx,2
	loop s
    
    mov ah, 4ch
    int 21h
code ends
end start


实验任务5

  • Line19的作用,与操作将低位开始第六位置0即小写字母变为大写字母,

  • 可知Line4的5个字节单元控制字体的颜色

实验任务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 cx,4
	mov bx,0
	s:
	mov al,[bx]
	or al,00100000B
	mov [bx],al
	mov al,[bx+16]
	or al,00100000B
	mov [bx+16],al
	mov al,[bx+32]
	or al,00100000B
	mov [bx+32],al
	mov al,[bx+48]
	or al,00100000B
	mov [bx+48],al
	inc bx
	loop s

   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 cx,5
	mov ax,table
	mov es,ax
	mov di,0
	mov bx,0
	c1:
	mov ax,[bx]
	mov es:[di],ax
	add bx,2
	mov ax,[bx]
	add di,2
	mov es:[di],ax
	add bx,2
	add di,14
	loop c1

	mov cx,5
	mov di,5
	c2:
	mov ax,[bx]
	mov es:[di],ax
	add bx,2
	add di,16
	loop c2
	
	mov cx,5
	mov di,8	
	c3:
	mov ax,[bx]
	mov es:[di],ax
	add bx,2
	add di,16
	loop c3

	mov cx,5
	mov di,5
	
	c4:
	mov ax,es:[di]
	mov dl,es:[di+3]
	div dl
	mov es:[di+6],al
	add di,16
	loop c4

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

刚开始逻辑段的信息

执行完成后

可以看到相应列的内容已复制到table中

posted on 2021-11-11 22:43  whiteblossoms  阅读(38)  评论(3编辑  收藏  举报