寄安 发表于 2022-4-16 21:43:42

散转

你好,这是我们的课后题,我看了下思路还是不太清晰,所以有哪位帅哥美女可以帮我看看,我散转也没用过,如果觉得麻烦,可以只列个框架,时间宽裕的话,就给我详细的留言一下,谢谢大家

人造人 发表于 2022-4-16 21:52:37

汇编语言?

寄安 发表于 2022-4-16 22:11:54

人造人 发表于 2022-4-16 21:52
汇编语言?

对,mcs51

人造人 发表于 2022-4-17 10:06:43

VAX单元和FUNC单元指的是?

寄安 发表于 2022-4-17 10:56:46

人造人 发表于 2022-4-17 10:06
VAX单元和FUNC单元指的是?

应该就是一个变量名吧,课后题也不会出啥超纲的,就把它当作普通的一个地址处理就行了吧。我是这样认为的

人造人 发表于 2022-4-18 17:17:11

STACK   SEGMENT IDATA
VAR   SEGMENT DATA

RSEGSTACK
   DS   10H   ; 16 Bytes Stack

RSEGVAR
x:   DS   2

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

; //#include <reg52.h>
;
; static unsigned int x;
;
; unsigned int mul(unsigned int a, unsigned int b) {
_mul:
            ; SOURCE LINE # 5
;---- Variable 'b?041' assigned to Register 'R4/R5' ----
;---- Variable 'a?040' assigned to Register 'R6/R7' ----
;   unsigned int result = 0;
            ; SOURCE LINE # 6
;---- Variable 'result?042' assigned to Register 'R2/R3' ----
    CLR   A
    MOV   R3,A
    MOV   R2,A
;   unsigned int i;
;   for(i = 0; i < a; ++i) result += b;
            ; SOURCE LINE # 8
;---- Variable 'i?043' assigned to Register 'DPTR' ----
    MOV   DPL,A
    MOV   DPH,A
?C0001:
    CLR   C
    MOV   A,DPL
    SUBB    A,R7
    MOV   A,DPH
    SUBB    A,R6
    JNC   ?C0002
    MOV   A,R5
    ADD   A,R3
    MOV   R3,A
    MOV   A,R4
    ADDC    A,R2
    MOV   R2,A
    INC   DPTR
    SJMP    ?C0001
?C0002:
;   return result;
            ; SOURCE LINE # 9
    MOV   R6,AR2
    MOV   R7,AR3
; }
            ; SOURCE LINE # 10
    RET   
; END OF _mul

;
; unsigned int FUNC(void) {
FUNC:
            ; SOURCE LINE # 12
;   if(x < 20) return mul(2, x);
            ; SOURCE LINE # 13
    CLR   C
    MOV   A,x+01H
    SUBB    A,#014H
    MOV   A,x
    SUBB    A,#00H
    JNC   ?C0005
    MOV   R5,x+01H
    MOV   R4,x
    MOV   R7,#02H
    SJMP    ?C0011
?C0005:
;   if(x < 50) return mul(5, x);
            ; SOURCE LINE # 14
    CLR   C
    MOV   A,x+01H
    SUBB    A,#032H
    MOV   A,x
    SUBB    A,#00H
    JNC   ?C0007
    MOV   R5,x+01H
    MOV   R4,x
    MOV   R7,#05H
?C0011:
    MOV   R6,#00H
    LJMP    _mul
?C0007:
;   return x;
            ; SOURCE LINE # 15
    MOV   R6,x
    MOV   R7,x+01H
; }
            ; SOURCE LINE # 16
?C0006:
    RET   
; END OF FUNC

;
; void main(void) {
main:
    MOV   SP,#STACK-1
            ; SOURCE LINE # 18
;   unsigned int result;
            ; SOURCE LINE # 19
;   {
;       x = 0; result = FUNC();
            ; SOURCE LINE # 21
    CLR   A
    MOV   x,A
    MOV   x+01H,A
    LCALL   FUNC
;---- Variable 'result?244' assigned to Register 'R6/R7' ----
;       x = 15; result = FUNC();
            ; SOURCE LINE # 22
    MOV   x,#00H
    MOV   x+01H,#0FH
    LCALL   FUNC
;       x = 19; result = FUNC();
            ; SOURCE LINE # 23
    MOV   x,#00H
    MOV   x+01H,#013H
    LCALL   FUNC
;   }
            ; SOURCE LINE # 24
;   {
            ; SOURCE LINE # 25
;       x = 20; result = FUNC();
            ; SOURCE LINE # 26
    MOV   x,#00H
    MOV   x+01H,#014H
    LCALL   FUNC
;       x = 40; result = FUNC();
            ; SOURCE LINE # 27
    MOV   x,#00H
    MOV   x+01H,#028H
    LCALL   FUNC
;       x = 49; result = FUNC();
            ; SOURCE LINE # 28
    MOV   x,#00H
    MOV   x+01H,#031H
    LCALL   FUNC
;   }
            ; SOURCE LINE # 29
;   {
            ; SOURCE LINE # 30
;       x = 50; result = FUNC();
            ; SOURCE LINE # 31
    MOV   x,#00H
    MOV   x+01H,#032H
    LCALL   FUNC
;       x = 90; result = FUNC();
            ; SOURCE LINE # 32
    MOV   x,#00H
    MOV   x+01H,#05AH
    LCALL   FUNC
;       x = 1000; result = FUNC();
            ; SOURCE LINE # 33
    MOV   x,#03H
    MOV   x+01H,#0E8H
    LCALL   FUNC
;   }
            ; SOURCE LINE # 34
?C0008:
;   while(1);
            ; SOURCE LINE # 35
    SJMP    ?C0008
; END OF main

    END




寄安 发表于 2022-4-18 21:00:12

人造人 发表于 2022-4-18 17:17


谢谢了
页: [1]
查看完整版本: 散转