一个小程序

书中遇到这样一个问题,令人眼前一亮的是第二种解法,看题:

编程,向内存0:200~0:23f依次传递数据0~63(3fh),程序中只能使用9条指令,9条指中包括“mov ax,4c00h”和“int 21h”。

这不很简单吗,设置好ss,sp,循环次数,然后循环push就行了,下面是传统的做法:

assume cs:code

code segment

start:
        mov ax,20h
        mov ds,ax  //设置数据段为20h
        mov bx,0   //bx从0开始,每次循环都增加1
        mov cx,40h //循环次数

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

        mov ax,4c00h
        int 21h

        code ends
end

这里写图片描述
执行完后
这里写图片描述

下面看另一种做法:

assume cs:code

code segment
start:
        mov bx,20h  
        mov ss,bx  //0:200h-0:23fh,可以将栈段设为20h,然后依次
                    //push

        mov sp,40h //初始时,堆栈指针应指向栈底
        mov bx,3f3eh //以字为单位,一次push两个字节,第一次push
        //就将0:23fh处设置为3f,0:23eh处设置为3e
        mov cx,32   //这样循环次数减少一半

s:      push bx
        sub bx,202h //比如3f3eh减去202h,就是3d3c
        loop s

        mov ax,4c00h
        int 21h

code ends
end

由于上一个程序已经将设置好了,所以重新打开DoxBox

这里写图片描述
继续进行上面的操作,只不过程序不同,看看结果
这里写图片描述
想法很独特,相信大多数人都是一下就想到传统的做法对吧,不要束缚自己的想法,非要按照某种规则,按部就班的编程,要有想法,有创意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值