打印
[点读笔/故事机应用]

怎样用汇编语言来写这个程序?

[复制链接]
1315|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:

使用特权

评论回复
5
laozhongyi| | 2016-7-16 14:15 | 只看该作者
还用汇编啊,都忘光了 。。。

使用特权

评论回复
6
Edisons| | 2016-7-16 14:15 | 只看该作者
对时间要求精确一般都用汇编。。。

使用特权

评论回复
7
_gege| | 2016-7-16 14:23 | 只看该作者
表示对8086和51用汇编还可以接受一点。

使用特权

评论回复
8
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

使用特权

评论回复
9
Listate| | 2016-7-16 14:31 | 只看该作者
新型的单片机指令集用汇编的吧

使用特权

评论回复
10
zhouhuanの|  楼主 | 2016-7-16 14:32 | 只看该作者
Listate 发表于 2016-7-16 14:31
新型的单片机指令集用汇编的吧

恩 是的,用其他的可能程序会崩溃的。。。

使用特权

评论回复
11
zhouhuanの|  楼主 | 2016-7-16 14:33 | 只看该作者
非常感谢大家给出的宝贵意见,多谢大家。。

使用特权

评论回复
12
mcu5i51| | 2016-7-16 17:01 | 只看该作者
Y=1
如果X >95       Y=Y+1
如果 X > 105   Y=Y+1

使用特权

评论回复
13
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

使用特权

评论回复
14
robter| | 2016-7-17 14:13 | 只看该作者
还是汇编效率高

使用特权

评论回复
15
QuakeGod| | 2016-7-19 16:26 | 只看该作者
wanglaojii 发表于 2016-7-16 14:09
x        equ        30h
y        equ        31h

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

1557

帖子

2

粉丝