标签:直接 png 修改 写入 开始 综合 内存 完整 效果
(1)我编写的汇编程序:
assume cs:code code segment mov ax,0b800h mov ds,ax mov bx,07b8h mov cx,16 s: mov [bx],0441h add bx,2 loop s mov ax,4c00h int 21h code ends end
(2)执行的效果:
(3)将源代码程序中字数据0403H→修改为0441H,再次执行的效果
说明:
通过这一实验任务,再次熟悉了向显存中写入数据,而得到不同的图案的操作。
1. 综合使用loop, [bx], mov实现 :
(1)我编写的汇编程序:
assume cs:code code segment mov ax,0020h mov ds,ax mov bx,0 mov ax,0 mov cx,64 s: mov [bx],al add bx,1 add al,1 loop s mov ax,4c00h int 21h code ends end
(2)执行效果
说明:
在这一步,我先使用了r命令来查看各个寄存器的值,由cx可知道程序段的长度,所以直接用了g命令来一次性执行了,再用d命令可以看到传送数据成功。
2. 利用栈的特性,综合使用 loop,push 实现:
(1)我编写的汇编程序:
assume cs:code code segment mov ax,0020h mov ss,ax mov sp,0040h mov bx,3f3eh mov cx,64 s: push bx sub bh,2 sub bl,2 loop s mov ax,4c00h int 21h code ends end
(2)执行效果:
说明:
(1)首先填写的汇编程序为:
assume cs:code code segment mov ax,cs ;这里的解释详见以下说明 mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,0 ;此处我先初始化cx的值为0 s: mov al,[bx] mov es:[bx],al inc bx loop s mov ax,4c00h int 21h code ends end
说明:
(2)按照上面我的想法进行操作,用r命令查看一开始cx的值,再用u命令反汇编:
由上面可以观察到cx的初始值即程序段的长度为001Ch,后两条指令的长度总和为2+3=5,则需要复制的指令长度为001C-5=0017h
(3)然后我再修改汇编程序:
assume cs:code code segment mov ax,cs mov ds,ax mov ax,0020h mov es,ax mov bx,0 mov cx,0017h s: mov al,[bx] mov es:[bx],al inc bx loop s mov ax,4c00h int 21h code ends end
(4)执行效果:
可以利用u命令反汇编观察到指令确实被写入了内存0:200处
标签:直接 png 修改 写入 开始 综合 内存 完整 效果
原文地址:https://www.cnblogs.com/kwcymino/p/9960424.html