鱼C论坛

 找回密码
 立即注册
查看: 3208|回复: 6

[已解决]散转

[复制链接]
发表于 2022-4-16 21:43:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
你好,这是我们的课后题,我看了下思路还是不太清晰,所以有哪位帅哥美女可以帮我看看,我散转也没用过,如果觉得麻烦,可以只列个框架,时间宽裕的话,就给我详细的留言一下,谢谢大家
最佳答案
2022-4-18 17:17:11
  1. STACK   SEGMENT IDATA
  2. VAR     SEGMENT DATA

  3. RSEG  STACK
  4.      DS   10H   ; 16 Bytes Stack

  5. RSEG  VAR
  6. x:   DS   2

  7. CSEG    AT      0
  8. USING   0   ; Register-Bank 0
  9. ; Execution starts at address 0 on power-up.
  10.     JMP     MAIN

  11. ; //#include <reg52.h>
  12. ;
  13. ; static unsigned int x;
  14. ;
  15. ; unsigned int mul(unsigned int a, unsigned int b) {
  16. _mul:
  17.             ; SOURCE LINE # 5
  18. ;---- Variable 'b?041' assigned to Register 'R4/R5' ----
  19. ;---- Variable 'a?040' assigned to Register 'R6/R7' ----
  20. ;   unsigned int result = 0;
  21.             ; SOURCE LINE # 6
  22. ;---- Variable 'result?042' assigned to Register 'R2/R3' ----
  23.     CLR     A
  24.     MOV     R3,A
  25.     MOV     R2,A
  26. ;   unsigned int i;
  27. ;   for(i = 0; i < a; ++i) result += b;
  28.             ; SOURCE LINE # 8
  29. ;---- Variable 'i?043' assigned to Register 'DPTR' ----
  30.     MOV     DPL,A
  31.     MOV     DPH,A
  32. ?C0001:
  33.     CLR     C
  34.     MOV     A,DPL
  35.     SUBB    A,R7
  36.     MOV     A,DPH
  37.     SUBB    A,R6
  38.     JNC     ?C0002
  39.     MOV     A,R5
  40.     ADD     A,R3
  41.     MOV     R3,A
  42.     MOV     A,R4
  43.     ADDC    A,R2
  44.     MOV     R2,A
  45.     INC     DPTR
  46.     SJMP    ?C0001
  47. ?C0002:
  48. ;   return result;
  49.             ; SOURCE LINE # 9
  50.     MOV     R6,AR2
  51.     MOV     R7,AR3
  52. ; }
  53.             ; SOURCE LINE # 10
  54.     RET     
  55. ; END OF _mul

  56. ;
  57. ; unsigned int FUNC(void) {
  58. FUNC:
  59.             ; SOURCE LINE # 12
  60. ;   if(x < 20) return mul(2, x);
  61.             ; SOURCE LINE # 13
  62.     CLR     C
  63.     MOV     A,x+01H
  64.     SUBB    A,#014H
  65.     MOV     A,x
  66.     SUBB    A,#00H
  67.     JNC     ?C0005
  68.     MOV     R5,x+01H
  69.     MOV     R4,x
  70.     MOV     R7,#02H
  71.     SJMP    ?C0011
  72. ?C0005:
  73. ;   if(x < 50) return mul(5, x);
  74.             ; SOURCE LINE # 14
  75.     CLR     C
  76.     MOV     A,x+01H
  77.     SUBB    A,#032H
  78.     MOV     A,x
  79.     SUBB    A,#00H
  80.     JNC     ?C0007
  81.     MOV     R5,x+01H
  82.     MOV     R4,x
  83.     MOV     R7,#05H
  84. ?C0011:
  85.     MOV     R6,#00H
  86.     LJMP    _mul
  87. ?C0007:
  88. ;   return x;
  89.             ; SOURCE LINE # 15
  90.     MOV     R6,x
  91.     MOV     R7,x+01H
  92. ; }
  93.             ; SOURCE LINE # 16
  94. ?C0006:
  95.     RET     
  96. ; END OF FUNC

  97. ;
  98. ; void main(void) {
  99. main:
  100.     MOV   SP,#STACK-1
  101.             ; SOURCE LINE # 18
  102. ;   unsigned int result;
  103.             ; SOURCE LINE # 19
  104. ;   {
  105. ;       x = 0; result = FUNC();
  106.             ; SOURCE LINE # 21
  107.     CLR     A
  108.     MOV     x,A
  109.     MOV     x+01H,A
  110.     LCALL   FUNC
  111. ;---- Variable 'result?244' assigned to Register 'R6/R7' ----
  112. ;       x = 15; result = FUNC();
  113.             ; SOURCE LINE # 22
  114.     MOV     x,#00H
  115.     MOV     x+01H,#0FH
  116.     LCALL   FUNC
  117. ;       x = 19; result = FUNC();
  118.             ; SOURCE LINE # 23
  119.     MOV     x,#00H
  120.     MOV     x+01H,#013H
  121.     LCALL   FUNC
  122. ;   }
  123.             ; SOURCE LINE # 24
  124. ;   {
  125.             ; SOURCE LINE # 25
  126. ;       x = 20; result = FUNC();
  127.             ; SOURCE LINE # 26
  128.     MOV     x,#00H
  129.     MOV     x+01H,#014H
  130.     LCALL   FUNC
  131. ;       x = 40; result = FUNC();
  132.             ; SOURCE LINE # 27
  133.     MOV     x,#00H
  134.     MOV     x+01H,#028H
  135.     LCALL   FUNC
  136. ;       x = 49; result = FUNC();
  137.             ; SOURCE LINE # 28
  138.     MOV     x,#00H
  139.     MOV     x+01H,#031H
  140.     LCALL   FUNC
  141. ;   }
  142.             ; SOURCE LINE # 29
  143. ;   {
  144.             ; SOURCE LINE # 30
  145. ;       x = 50; result = FUNC();
  146.             ; SOURCE LINE # 31
  147.     MOV     x,#00H
  148.     MOV     x+01H,#032H
  149.     LCALL   FUNC
  150. ;       x = 90; result = FUNC();
  151.             ; SOURCE LINE # 32
  152.     MOV     x,#00H
  153.     MOV     x+01H,#05AH
  154.     LCALL   FUNC
  155. ;       x = 1000; result = FUNC();
  156.             ; SOURCE LINE # 33
  157.     MOV     x,#03H
  158.     MOV     x+01H,#0E8H
  159.     LCALL   FUNC
  160. ;   }
  161.             ; SOURCE LINE # 34
  162. ?C0008:
  163. ;   while(1);
  164.             ; SOURCE LINE # 35
  165.     SJMP    ?C0008
  166. ; END OF main

  167.     END
复制代码


1.png
2.png
3.png
7E67F0AD-8B9E-4DFB-A414-5C59254A9725.jpeg
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-16 21:52:37 | 显示全部楼层
汇编语言?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-16 22:11:54 | 显示全部楼层

对,mcs51
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-17 10:06:43 | 显示全部楼层
VAX单元和FUNC单元指的是?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-17 10:56:46 | 显示全部楼层
人造人 发表于 2022-4-17 10:06
VAX单元和FUNC单元指的是?

应该就是一个变量名吧,课后题也不会出啥超纲的,就把它当作普通的一个地址处理就行了吧。我是这样认为的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-18 17:17:11 | 显示全部楼层    本楼为最佳答案   
  1. STACK   SEGMENT IDATA
  2. VAR     SEGMENT DATA

  3. RSEG  STACK
  4.      DS   10H   ; 16 Bytes Stack

  5. RSEG  VAR
  6. x:   DS   2

  7. CSEG    AT      0
  8. USING   0   ; Register-Bank 0
  9. ; Execution starts at address 0 on power-up.
  10.     JMP     MAIN

  11. ; //#include <reg52.h>
  12. ;
  13. ; static unsigned int x;
  14. ;
  15. ; unsigned int mul(unsigned int a, unsigned int b) {
  16. _mul:
  17.             ; SOURCE LINE # 5
  18. ;---- Variable 'b?041' assigned to Register 'R4/R5' ----
  19. ;---- Variable 'a?040' assigned to Register 'R6/R7' ----
  20. ;   unsigned int result = 0;
  21.             ; SOURCE LINE # 6
  22. ;---- Variable 'result?042' assigned to Register 'R2/R3' ----
  23.     CLR     A
  24.     MOV     R3,A
  25.     MOV     R2,A
  26. ;   unsigned int i;
  27. ;   for(i = 0; i < a; ++i) result += b;
  28.             ; SOURCE LINE # 8
  29. ;---- Variable 'i?043' assigned to Register 'DPTR' ----
  30.     MOV     DPL,A
  31.     MOV     DPH,A
  32. ?C0001:
  33.     CLR     C
  34.     MOV     A,DPL
  35.     SUBB    A,R7
  36.     MOV     A,DPH
  37.     SUBB    A,R6
  38.     JNC     ?C0002
  39.     MOV     A,R5
  40.     ADD     A,R3
  41.     MOV     R3,A
  42.     MOV     A,R4
  43.     ADDC    A,R2
  44.     MOV     R2,A
  45.     INC     DPTR
  46.     SJMP    ?C0001
  47. ?C0002:
  48. ;   return result;
  49.             ; SOURCE LINE # 9
  50.     MOV     R6,AR2
  51.     MOV     R7,AR3
  52. ; }
  53.             ; SOURCE LINE # 10
  54.     RET     
  55. ; END OF _mul

  56. ;
  57. ; unsigned int FUNC(void) {
  58. FUNC:
  59.             ; SOURCE LINE # 12
  60. ;   if(x < 20) return mul(2, x);
  61.             ; SOURCE LINE # 13
  62.     CLR     C
  63.     MOV     A,x+01H
  64.     SUBB    A,#014H
  65.     MOV     A,x
  66.     SUBB    A,#00H
  67.     JNC     ?C0005
  68.     MOV     R5,x+01H
  69.     MOV     R4,x
  70.     MOV     R7,#02H
  71.     SJMP    ?C0011
  72. ?C0005:
  73. ;   if(x < 50) return mul(5, x);
  74.             ; SOURCE LINE # 14
  75.     CLR     C
  76.     MOV     A,x+01H
  77.     SUBB    A,#032H
  78.     MOV     A,x
  79.     SUBB    A,#00H
  80.     JNC     ?C0007
  81.     MOV     R5,x+01H
  82.     MOV     R4,x
  83.     MOV     R7,#05H
  84. ?C0011:
  85.     MOV     R6,#00H
  86.     LJMP    _mul
  87. ?C0007:
  88. ;   return x;
  89.             ; SOURCE LINE # 15
  90.     MOV     R6,x
  91.     MOV     R7,x+01H
  92. ; }
  93.             ; SOURCE LINE # 16
  94. ?C0006:
  95.     RET     
  96. ; END OF FUNC

  97. ;
  98. ; void main(void) {
  99. main:
  100.     MOV   SP,#STACK-1
  101.             ; SOURCE LINE # 18
  102. ;   unsigned int result;
  103.             ; SOURCE LINE # 19
  104. ;   {
  105. ;       x = 0; result = FUNC();
  106.             ; SOURCE LINE # 21
  107.     CLR     A
  108.     MOV     x,A
  109.     MOV     x+01H,A
  110.     LCALL   FUNC
  111. ;---- Variable 'result?244' assigned to Register 'R6/R7' ----
  112. ;       x = 15; result = FUNC();
  113.             ; SOURCE LINE # 22
  114.     MOV     x,#00H
  115.     MOV     x+01H,#0FH
  116.     LCALL   FUNC
  117. ;       x = 19; result = FUNC();
  118.             ; SOURCE LINE # 23
  119.     MOV     x,#00H
  120.     MOV     x+01H,#013H
  121.     LCALL   FUNC
  122. ;   }
  123.             ; SOURCE LINE # 24
  124. ;   {
  125.             ; SOURCE LINE # 25
  126. ;       x = 20; result = FUNC();
  127.             ; SOURCE LINE # 26
  128.     MOV     x,#00H
  129.     MOV     x+01H,#014H
  130.     LCALL   FUNC
  131. ;       x = 40; result = FUNC();
  132.             ; SOURCE LINE # 27
  133.     MOV     x,#00H
  134.     MOV     x+01H,#028H
  135.     LCALL   FUNC
  136. ;       x = 49; result = FUNC();
  137.             ; SOURCE LINE # 28
  138.     MOV     x,#00H
  139.     MOV     x+01H,#031H
  140.     LCALL   FUNC
  141. ;   }
  142.             ; SOURCE LINE # 29
  143. ;   {
  144.             ; SOURCE LINE # 30
  145. ;       x = 50; result = FUNC();
  146.             ; SOURCE LINE # 31
  147.     MOV     x,#00H
  148.     MOV     x+01H,#032H
  149.     LCALL   FUNC
  150. ;       x = 90; result = FUNC();
  151.             ; SOURCE LINE # 32
  152.     MOV     x,#00H
  153.     MOV     x+01H,#05AH
  154.     LCALL   FUNC
  155. ;       x = 1000; result = FUNC();
  156.             ; SOURCE LINE # 33
  157.     MOV     x,#03H
  158.     MOV     x+01H,#0E8H
  159.     LCALL   FUNC
  160. ;   }
  161.             ; SOURCE LINE # 34
  162. ?C0008:
  163. ;   while(1);
  164.             ; SOURCE LINE # 35
  165.     SJMP    ?C0008
  166. ; END OF main

  167.     END
复制代码


1.png
2.png
3.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-18 21:00:12 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-7 14:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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