王爽《汇编语言》实验四
(1)(2)向内存0:200 ~ 0:23f依次传送数据0~63(3fh)
0:200 ~ 0:23f单元等同于0020:0 ~ 0023:f
assume cs:code
code segment
mov ax,0020h
mov ds,ax
mov bx,0
mov cx,64
s: mov ds:[bx],bl
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
按照之前实验3说的方法编译一下,开始debug
一路t,直到第一次看见下一条是loop,按p执行完当前所有loop
查看内存0:200~0:23f,发现写进去了
(3)
1.此处将ds置为cs,即mov as,cs
。
2.可以先将此空置为空,启用debug模式调试程序,在进入后的cx中可知程序的字节数(书p91)
assume cs:code
code segment
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,0 ;此处填0相当于留空
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
在这里我们可以看到,代码的长度是0x1c,但由于从mov ax,4c00h
开始的指令的机器指令是B8 00 4C CD 21
,一共五个字节,所以长度为0x1c - 5 = 0x17
这下知道空2的答案为17h
编写asm
assume cs:code
code segment
mov ax,cs ;空1
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,17h ;空2
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
运行前的内存0:200
运行后的内存0:200