实验4

Posted kerman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验4相关的知识,希望对你有一定的参考价值。

 

 

1. 综合使用 loop,[bx],编写完整汇编程序,实现向内存 b800:07b8 开始的连续 16 个
字单元重复填充字数据 0403H。

这题就是简单的循环操作,将固定的数据填入,不过这里需要注意的是题目中为16字而不是字节,需要分高位和低位分开写入,因为ds:[bx]是以字节为单位的。

汇编代码:

assume cs:code
code segment
        mov ax, 0b800h
        mov ds, ax

        mov ax, 0403h

        mov bx, 07b8h
        mov cx, 16                  

s:      mov ds:[bx], al
        inc bx
        mov ds:[bx], ah
        inc bx
        loop s

        mov ax, 4c00h 
        int 21h

code ends

end

  技术分享图片

将其中的0403h改为0441h后结果如下:

技术分享图片

2. 综合使用 loop,[bx],编写完整汇编源程序,实现向内存 0:200~0:23F 依次传送数据
0~63(3FH)。
(1)必做:综合使用 loop, [bx], mov 实现

这题和第一题十分的相似,区别在于原来是在一连续区域写入同一数据,现在变为每一次写入不同的数据。这里我直接用bx同时作为地址和数据的变量,也可以分开写,再引入一个变量。

代码如下:

assume cs:code
code segment
        mov ax, 20h
        mov ds, ax

        mov bx, 0
        mov cx, 64

s:      mov [bx], bx
        inc bx
        loop s

        mov ax, 4c00h
        int 21h

code ends
end

  技术分享图片

技术分享图片

(2)选做*:利用栈的特性,综合使用 loop,push 实现(限定仅使用 8086 中已学过
指令实现)

这题很简单,就是push后直接pop,因为栈是FILO。

代码如下:

assume cs:code
code segment
        mov ax, 20h
        mov ds, ax

        mov bx, 0
        mov cx, 64

s:      push bx
        pop ds:[bx]
        inc bx
        loop s

        mov ax, 4c00h
        int 21h


code ends
end

  技术分享图片

用g命令一次执行完成后,用d命令进行查看,可以发现0:200开始的值改变成我们写入的0~63了。

3. 教材实验 4(3)(P121)

这题一开始我一直错误,最后一句没有复制成功,后来发现原来是我循环的次数搞错了,将次数数成了要复制的最后一句的上一句,因此每次都会少一句,这里cx设为几就循环几次,另外代码的开始地址可以通过

cs或者code给出,而这里代码的长度我是通过先填一个数,然后调试看它的长度,不过这里要看清楚,不要像我一样数错了。

代码如下:

assume cs:code

code segment

        mov ax, code
        mov ds, ax

        mov ax, 0020h
        mov es, ax

        mov bx, 0
        mov cx, 18h
s:      mov al, [bx]
        mov es:[bx], al
        inc bx
        loop s

        mov ax, 4c00h
        int 21h

code ends

end

  技术分享图片

本次实验相对来说其实还是很简单的,只要概念清晰,一些操作命令熟悉,不会有太大的问题。

 





以上是关于实验4的主要内容,如果未能解决你的问题,请参考以下文章

[NTUSTISC pwn LAB 7]Return to libc实验(puts泄露libc中gadget片段定位)

JSP 设计教师与学生不同登陆界面(带验证码)

使用 React 实验性中继片段:缺少属性 '"$fragmentRefs"'

chapter1.高通量序列实验简介:设计与生物信息学分析

VSCode自定义代码片段4——cli的终端命令大全

web代码片段