比较2个寄存器,每个寄存器包含一个字符LC-3组件

时间:2015-02-02 04:35:58

标签: assembly cpu-registers subtraction lc3

所以我第一次学习装配LC-3机器,所以我还是一个新手。我试图让我的程序读取2个字符,比较它们,然后输出较小的字符。到目前为止,我所做的是将第一个字符存储在寄存器1中,第二个字符存储在寄存器2中。然后,我想减去ASCII值,然后如果结果是< 0,第一个会更小,如果是> 0第二个会更小,如果它= 0,那么它们将是相同的字符。

我的问题是我无法弄清楚如何减去寄存器中的2个字符。我试过在线搜索,看着我的笔记,我找不到任何回答我的问题。到目前为止,这是我的代码:

.orig x3000
LEA R0, msg ;loads message into R0
PUTS    ;puts message to screen

GETC    ;reads a char
OUT ;puts char to screen
ADD R1, R1, R0  ;R1 <- R0

LEA R0, msg ;loads message into R0 again
PUTS    ;puts message to screen
GETC    ;reads another char
OUT ;puts char to screen
ADD R2, R2, R0  ;R2 <- R0

ADD R1, R1, -R2 ;subtract second character from first character
                ;This line here is my problem!!!!

BRP elseif  ;if it's positive, the second character is larger
BRZ else    ;if it's zero, they are the same

if  
    LEA R0, msg2    ;loads second message
    PUTS    ;puts second message on screen
    AND R0, R0, #0  ;clears R0
    ADD R0, R0, R1  ;R0 <- R1
    OUT ;print the first char
    br endif

elseif  
    LEA R0, msg2    ;loads second message
    PUTS    ;puts second message on screen
    AND R0, R0, #0  ;clears R0
    ADD R0, R0, R2  ;R0 <- R2
    OUT ;print the second char
    br endif

else    
    LEA R0, msg3    ;loads third message
    br endif

endif

    HALT

msg .STRINGZ "\nEnter any character: "
msg2    .STRINGZ "\nThe smallest character is: "
msg3    .STRINGZ "\nThe characters are the same."
    .END

请记住,这就像我的第一次集会计划,所以它可能非常可怕。 ^ _ ^“但是因为我还在学习,所以我想保持它简单直接,即使它是一种愚蠢的方式来实现它。

所以在我休息之前的那一行是我遇到麻烦的地方。我尝试添加寄存器1和寄存器2的否定,如上所示,但这不起作用,所以基本上我的问题是,有没有办法可以减去/比较存储在2个寄存器中的两个char值?

任何帮助/建议将不胜感激!! :)

1 个答案:

答案 0 :(得分:1)

没有直接操作员使用LC3减去。你需要使用2的补码。

R1 = R2-R3;  //This is not possible.
// using 2's Complement method
R1 <- NOT R3;
R1 <- R1+1;
R1 <- R2+R1;

寄存器R1将具有减法结果。您可以使用比较代码打印出较小的数字