实验四 [bx]和loop的使用

四.实验结论

实验一:

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

实现代码如下:

assume cs:code
code segment
    mov ax,0b800h
    mov ds,ax
    mov bx,07b8h
    mov cx,16

  s:mov [bx],0403h
    add bx,2
    loop s

    mov ax,4c00h
    int 21h
code ends
end

 运行得到的结果:

是16个红色的爱心。

实验二

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

assume cs:code
code segment
        mov ax,00020h
        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

 利用debug进行调试,看是否符合题目要求:

用g命令先直接执行到loop语句,再单步执行,最后程序正常退出。

用d命令可观察到已存入。

实验三

程序源代码如下:

assume cs:code
code segment
        mov ax,cs
        mov ds,ax
        mov ax,0020h
        mov es,ax
        mov bx,0
        mov cx,17h

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

        mov ax,4c00h
        int 21h
code ends
end

 在算循环次数的时候要用cx的值减去mov ax,4c00h和int 21h的所占的字节长度。

如图所示cx值为001c,而mov ax,4c00h和int 21h总共占5个字节。所以循环次数应为17h。

五.总结与思考

了解了bx以及loop的使用,并会在编译执行之后使用debug进行调试和查看。利用debug的逐步调试发现新的问题,并且在其中解决困惑。

需要注意的是循环次数的确定以及偏移地址的计算。

 

posted @ 2018-11-19 19:49  Jadeite  阅读(337)  评论(1编辑  收藏  举报