[点读笔/故事机应用] 怎样用汇编语言来写这个程序?

[复制链接]
1704|14
 楼主| zhouhuanの 发表于 2016-7-16 14:00 | 显示全部楼层 |阅读模式
   自变量X为一无符号数,存放在片内RAM区30H单无,函数Y存放在31H单元。请编写满足如下关系的程序:X  <=95时,Y=1;95< X <105时,Y=2;X>=105时,Y=3。
bbapple 发表于 2016-7-16 14:01 | 显示全部楼层
教你一个方法学用汇编。
先用C语言写,编译后模拟调试,看其反汇编代码。
handleMessage 发表于 2016-7-16 14:08 | 显示全部楼层
我觉得要学会自己动脑,多用用就熟悉了。
wanglaojii 发表于 2016-7-16 14:09 | 显示全部楼层
x        equ        30h
y        equ        31h



        mov        a,x
         cjne        a,#95,loop1
loop:
         mov        y,#1
         ljmp        loop4
loop1:
         jc        loop
         cjne        a,#105,loop3
loop2:
         mov        y,#3
         ljmp        loop4
loop3:
         jnc        loop2
         mov        y,#2
loop4:
laozhongyi 发表于 2016-7-16 14:15 | 显示全部楼层
还用汇编啊,都忘光了 。。。
Edisons 发表于 2016-7-16 14:15 | 显示全部楼层
对时间要求精确一般都用汇编。。。
_gege 发表于 2016-7-16 14:23 | 显示全部楼层
表示对8086和51用汇编还可以接受一点。
Mozarts 发表于 2016-7-16 14:24 | 显示全部楼层
8 机器周期, 17字节      
       X DATA 30H
       Y DATA 31H

       MOV A, X           ;1
       ADD A, #(256-105)  ;2
       JNC L_100          ;3-4
         MOV A, #3        ;5
         SJMP L_200       ;6-7
L_100:
       ADD A, #(105-96)   ;5  
       CLR A                ;6
       ADDC A, #1       ;7
L_200:
       MOV Y, A           ;8
Listate 发表于 2016-7-16 14:31 | 显示全部楼层
新型的单片机指令集用汇编的吧
 楼主| zhouhuanの 发表于 2016-7-16 14:32 | 显示全部楼层
Listate 发表于 2016-7-16 14:31
新型的单片机指令集用汇编的吧

恩 是的,用其他的可能程序会崩溃的。。。
 楼主| zhouhuanの 发表于 2016-7-16 14:33 | 显示全部楼层
非常感谢大家给出的宝贵意见,多谢大家。。
mcu5i51 发表于 2016-7-16 17:01 | 显示全部楼层
Y=1
如果X >95       Y=Y+1
如果 X > 105   Y=Y+1
mcu5i51 发表于 2016-7-16 17:30 | 显示全部楼层
;Y=1;
MOV      Y,#0x01        ;2
;if(X>95) Y++;
MOV      A,X        ;1
SETB     C        ;1B
SUBB     A,#95        ;2B
JC       $+2        ;2
INC      Y        ;2
;if(X>105)Y++;
MOV      A,X        ;1
SETB     C        ;1
SUBB     A,#105        ;2
JC       $+2        ;2
INC      Y        ;2
用ADD代替SUB可以不用两个SETB C;8L用的就是
51 18字节,汇编都忘了,或说全乱了,看着指令表弄的,
类PIC的这个样子吧,没有测试,跳转类的可能反了,大致流程
MOVLW        1
MOVWF        Y
MOVLW        95
SUBWF        X,0
M_JC
INCF        Y,1
MOVLW        105
SUBWF        X,0
M_JC
INCF        Y,1
return
robter 发表于 2016-7-17 14:13 | 显示全部楼层
还是汇编效率高
QuakeGod 发表于 2016-7-19 16:26 | 显示全部楼层
wanglaojii 发表于 2016-7-16 14:09
x        equ        30h
y        equ        31h

这个汇编代码习惯不好。
首先,跳转标号一般用SKIPn,而不用LOOP,除非是循环。
第二,如果是条件跳转,只往后跳,不往回跳,防止出现失误造成死循环。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

1557

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部