数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
查看: 15502|回复: 75

fleurly,给你出个题目做做,有兴趣的话

[复制链接]
发表于 2009-10-22 11:24 | 显示全部楼层 |阅读模式
一台有可列个存储单元的机器,其地址分别为0,1,2,3..........
第i个存储可以计为R(i)
每个存储单元上可以存储一个任意自然数(所谓自然数就是非负整数,0,1,2,...)
它是基于指令集的机器,有四条指令:
A addr : 地址为addr的存储单元自加1
S addr : 地址为addr的存储单元自减1,0自减1还是0
S      : 停机指令
E addr,C:跳转指令,如果addr地址的存储不为0,则跳转到第C条指令,否则下一条指令.
计算初始的时候,除了人为设置的存储之外,别的存储都为0(其实这个条件可有可无,但为了方便还是这么规定)
写一个程序,计算R(3)=R(1)^R(2)
^表示乘方
也就是计算之前,设定R(1),R(2)
计算机遇到S指令停机时,R(3)存储的值为当初的R(1)^R(2)
发表于 2009-10-22 13:17 | 显示全部楼层

fleurly,给你出个题目做做,有兴趣的话

写出来了
发表于 2009-10-22 13:21 | 显示全部楼层

fleurly,给你出个题目做做,有兴趣的话

#include #include #define A(R) (R++) #define S(R) ( (R>0)?(R--)0) ) #define STOP {printf("R3=%u\n", R3);return 0;} #define E(val, C) { if(val){goto C;}} #define DEBUG() {printf("R1=%u, R2=%u, R3=%u, R4=%u, R5=%u, R6=%u, R7=%u, R8=%u, R9=%u, R10=%u \n", R1, R2, R3, R4, R5, R6, R7, R8, R9, R10);} #define R6_SRC 6 #define R7_SRC 7 unsigned int R1=R6_SRC; unsigned int R2=R7_SRC; unsigned int R3=0; unsigned int R4=0; unsigned int R5=0; unsigned int R6=0; unsigned int R7=0; unsigned int R8=0; unsigned int R9=0; unsigned int R10=0; void testA(){ printf("R1=%u\n", R1); A(R1); printf("R1=%u\n", R1); } void testS(){ R1=1; printf("R1=%u\n", R1); S(R1); printf("R1=%u\n", R1); S(R1); printf("R1=%u\n", R1); } void testMain(){ R1=R6_SRC; R2=R7_SRC; DEBUG(); S(R2); L_1: A(R4); A(R5); A(R6); A(R7); //A(R8); A(R9); S(R1); E(R1, L_1); //R3 = R3 + R4 L_ONE_ROUND: printf("-------- Begin of One round ---------\n"); DEBUG(); A(R5); L_R3_MUL: S(R5); E(R5, L_R3_ADD); E(R2, L_END_R3_MUL); L_R3_ADD: //sleep(1); //DEBUG(); A(R3); S(R4); E(R4, L_R3_ADD); E(R7, L_COPY_R7_R4); E(R8, L_COPY_R8_R4); //Copy R7 to R4 L_COPY_R7_R4: A(R8); A(R4); S(R7); E(R7, L_COPY_R7_R4); E(R4, L_R3_MUL); L_COPY_R8_R4: A(R7); A(R4); S(R8); E(R8,L_COPY_R8_R4); E(R4, L_R3_MUL); L_END_R3_MUL: //Decide which one to use to copy to R5 //sleep(1); //DEBUG(); E(R9, L_COPY_R9_R5); E(R10, L_COPY_R10_R5); L_COPY_R9_R5: A(R10); A(R5); S(R9); E(R9, L_COPY_R9_R5); E(R5, L_COPY_R3_TO_R6); L_COPY_R10_R5: A(R9); A(R5); S(R10); E(R10,L_COPY_R10_R5); E(R5, L_COPY_R3_TO_R6); L_COPY_R3_TO_R6: R4_CLEAR: S(R4); E(R4, R4_CLEAR); R7_CLEAR: S(R7); E(R7, R7_CLEAR); R8_CLEAR: S(R8); E(R8, R8_CLEAR); L_COPY_R3_TO_R7_START: A(R7); A(R4); S(R3); E(R3, L_COPY_R3_TO_R7_START); S(R2); E(R2, L_ONE_ROUND); L_END_PRO: DEBUG(); return ; } int main(){ testMain(); return 0; }
发表于 2009-10-22 13:22 | 显示全部楼层

fleurly,给你出个题目做做,有兴趣的话

testMain里边是
这个是用C语言模拟的。
//开头的行是注释掉的没用的代码。
 楼主| 发表于 2009-10-22 14:21 | 显示全部楼层

fleurly,给你出个题目做做,有兴趣的话

:-)
不错
你编程确实很强
数学需要的不是特性还是共性
你想想如果给你一个
R1^R2+R3*R4+R5^(R6*R7)
这样的表达式乃至一般的表达式,你可以想到该如何解决问题呢?
发表于 2009-10-22 14:30 | 显示全部楼层

fleurly,给你出个题目做做,有兴趣的话

下面引用由wanwna2009/10/22 02:21pm 发表的内容:
:-)
不错
你编程确实很强
数学需要的不是特性还是共性
...
写函数啊
上边的很多label,都是分段好的函数
 楼主| 发表于 2009-10-22 14:38 | 显示全部楼层

fleurly,给你出个题目做做,有兴趣的话

那,这么一个"简单"的计算机到底有多强呢?
发表于 2009-10-22 15:13 | 显示全部楼层

fleurly,给你出个题目做做,有兴趣的话

加减乘除都行,象内存拷贝一类的也能实现, 所以功能非常强大...........
发表于 2009-10-22 21:24 | 显示全部楼层

fleurly,给你出个题目做做,有兴趣的话

用C语言的DEBUG模拟汇编,这属于哪一家功夫?原来你就这点本领。
真是牛人呀
发表于 2009-10-22 21:26 | 显示全部楼层

fleurly,给你出个题目做做,有兴趣的话

照3楼这样的做法,你应当更牛,把操作系统的所有一切都DEBUG一下,然后,向全世界高呼:我写出了所有WINDOWS的原码!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2025-6-21 03:17 , Processed in 0.100838 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表