作业2

问题回答 ① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 076C__, 寄存器(SS) = 076D__, 寄存器(CS) = 076E__ ② 假设程序加载后,code段的段地址是X,则,data段的段地址是__X-32__, stack的段地址是 X-16__。

① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 076C, 寄存器(SS) = 076D__, 寄存器(CS) = 076E__ ② 假设程序加载后,code段的段地址是X,则,data段的段地址是__X-32__, stack的段地址是 X-16__。

① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = 076C__, 寄存器(SS) = 076E, 寄存器(CS) = 0770__ ② 假设程序加载后,code段的段地址是X,则,data段的段地址是__X - 64__, stack的段地址是 X - 32__。

问题回答 ① 在debug中将执行到line9结束、line11之前,记录此时:寄存器(DS) = 076E, 寄存器(SS) = 0770, 寄存器(CS) = 076C ② 假设程序加载后,code段的段地址是X____,则,data段的段地址是_X + 32___, stack的段地址 是__X + 64__。
① 对于如下定义的段,程序加载后,实际分配给该段的内存空间大小是 (N + 15) / 16 * 16.
② 如果将程序task1_1.asm, task1_2.asm, task1_3.asm, task1_4.asm中,伪指令 end start 改成 end , 哪一个程序仍然可以正确执行。结合实践观察得到的结论,分析、说明原因。
最后一个,能程序找到入口

assume cs:code
code segment
start:
	mov ax,0b800H
	mov ds,ax
	mov bx,0f00H
	mov cx,80
s:  mov [bx],0403H
    add bx,2
	loop s
	mov ah,4cH
	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 ax,data1
	mov bx,0
	mov cx,10
	mov dx,data2
	mov es,ax
	mov ax,data3
	mov ds,ax
s:
	mov ax,0
	add ax,es:[bx]
	mov es,dx
	add ax,es:[bx]
	mov ds:[bx],ax
	mov ax,data1
	mov es,ax
	add bx,2
	loop s
	mov ah,4ch
	int 21h
code ends
end start

assume cs:code
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,data2
	mov ds,ax
	mov ax,data1
	mov es,ax
	mov cx,8
	mov bx,0
	mov di,14
s:  mov ax,es:[bx]
	mov ds:[di],ax
	add bx,2
	sub di,2
	loop s

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

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
   add byte ptr ds:[bx],32
   add byte ptr ds:[bx+16],32
   add byte ptr ds:[bx+17],32
   add byte ptr ds:[bx+18],32
   add byte ptr ds:[bx+19],32
   add byte ptr ds:[bx+32],32
   add byte ptr ds:[bx+33],32
   add byte ptr ds:[bx+34],32
   add byte ptr ds:[bx+35],32
   add byte ptr ds:[bx+48],32
   mov ah, 4ch
   int 21h
code ends

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 ;bx是data的行指针
	mov si,0 ;si是table的行指针
	mov di,0 ;di是data的列指针

s:  mov al,ds:[bx+di]
	mov es:[si],al
	mov al,ds:[bx+di+1]
	mov es:[si+1],al
	mov al,ds:[bx+di+2]
	mov es:[si+2],al
	mov al,ds:[bx+di+3]
	mov es:[si+3],al

	shr di,1
	add si,7
	mov bx,20
	mov bp,ds:[bx+di]
	mov es:[si],bp
	mov ax,ds:[bx+di]

	mov bx,30
	add si,3
	mov bp,ds:[bx+di]
	mov es:[si],bp
	mov dx,ds:[bx+di]

	add si,3
	div dl
	mov ah,0
	mov es:[si],ax

	shl di,1
	add di,4
	add si,3
	mov bx,0
	loop s

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

posted @ 2021-11-12 01:33  wxhwqy  阅读(19)  评论(4)    收藏  举报