在ubuntu12.04下安装tinyos2.1.1最后编译Blink应用程序

在ubuntu12.04下安装tinyos2.1.1最后编译Blink应用程序,第1张

查看Makefile,  那一行写对没有

include $(MAKERULES)

ubuntu的sudo估计没有把变量$MAKERULES带过去

你可以sudo echo $MAKERULES 看一下有没有值

你需要把MAKEFILE环境变量保留,可以更改/etc/suders文件,增加

Defaults env_keep += "MAKERULES"

要不你就不要用sudo, 把:/opt/tinyos-211/apps的所有权限给当前用户

您好,使用Tiny v2订阅是非常简单的。首先,您需要在Tiny官网上注册一个账号,然后登录您的账号,点击“订阅”按钮,您就可以看到Tiny v2订阅的所有选项。您可以根据自己的需求选择合适的订阅方案,然后点击“继续”按钮,进入支付页面,选择您的支付方式,完成支付后,您就可以使用Tiny v2订阅了。Tiny v2订阅提供了一系列的功能,包括:支持多种语言,支持多种设备,支持跨平台,支持实时同步,支持安全加密,支持自定义模板,支持实时通知等。Tiny v2订阅可以帮助您更好地管理您的文件,让您的工作更加高效。

第一题

bitswap proc

push ax ;保存AX寄存器内容

mov al,A ;数据在AL中

mov ah,al ;复制一个在AH

and ax,1010101001010101b ;and后AH中剩下7531位,AL中剩下6420位,其它位为0

;写出来是AH = 7531 AL = 6420 其中每个点是一个0,但不是我们需要的内容

;需要做出 67452301,所以用下面办法就是

shr ah,1 ;把ah里的数都右移1位,ah里就是 7531,最前面的点是SHR补入的0

shl al,1 ;把al里的数都左移1位,al里就是 6420,最后面的点是SHL补入的0

or al,ah ;再OR合并,al里就是 67452301了

mov A,al ;结果放回A中

pop ax ;恢复被破坏的AX

ret ;返回

bitswap endp

第二题

;作为MSDOS微模式程序(Tiny)编译为COM文件即可

maxcnt equ 10

code segment

assume cs:code,ds:code,es:code

org 100h

main: mov dx,offset msg0

call puts

xor bx,bx ;bx清零,作为向array中存数据的下标

lab_1: call getnum ;调用子程序输入数据

jc dump ;子程序返回时若CF=1则表示用户直接回车要求结束,否则若CF=0用户输入的值在AX中

mov array[bx],ax ;ax存入array[bx]

add bx,2 ;下标加

cmp bx,maxcnt2 ;检查下标是否越界

jb lab_1 ;若没越界则继续输入

mov dx,offset msg1 ;否则显示强制结束输入的警告并开始输出其中的奇数

call puts

dump: mov dx,offset msg2 ;显示输出奇数的信息

call puts

xor si,si ;准备从0号下标开始检查数据并输出

xchg si,bx ;bx从0开始的下标,si是最后一个数据后面的地址

lab_2: cmp bx,si

jnb lab_4

mov ax,array[bx]

test al,1 ;若bit0为1则为奇数

jz lab_3 ;测试为0则是偶数,跳过输出

call printax

mov dx,offset tab ;用制表符分隔

call puts

lab_3: add bx,2 ;下标加

jmp lab_2 ;没有,继续

lab_4: mov ah,4ch ;退出

int 21h

getnum proc

xor cx,cx ;cx中放输入一个数时已经输入的有效位数

mov di,offset mydata

g_1: mov ah,8 ;输入字符,不回显

int 21h

cmp al,13 ;回车符

jne g_3 ;若不是则跳转

mov dx,offset crlf

call puts

jcxz g_2 ;若cx为0,当做用户直接回车的(也含输入后用退格键删回去的),此时表示用户希望结束输入

xor ax,ax

mov si,offset mydata

g_9: mul ten ;根据mydata中存的数计算返回值

mov dl,[si]

sub dl,'0'

xor dh,dh

add ax,dx

inc si

loop g_9

clc ;作为正常输入返回,CF置0表示有输入,ax中返回输入的数值

ret

g_2: stc ;没有输入过有效数据,直接回车的话表示结束输入,用CF置1表示

ret

g_3: cmp al,8 ;退格键

jne g_4

jcxz g_1 ;已经到头了则忽略

dec cx ;模拟退格动作

dec di

mov dx,offset bksp ;

call puts

jmp g_1 ;继续输入

g_4: cmp cx,3 ;已经输入了3位了

jae g_1 ;不再接受进一步的输入

cmp al,'0' ;

jb g_1 ;无效输入,忽略

cmp al,'9'

ja g_1

mov dl,al

call putc ;回显合法的输入

stosb ;存入es:[di]中并di++,作为微模式时es默认值等于cs

inc cx

jmp g_1 ;继续输入

getnum endp

printax proc

xor dx,dx

div ten

mov cx,ax

or cx,dx ;若商与余数都为0则结束递归

jz p_1

push dx ;留存DX中的余数以在递归后输出

call printax ;递归

pop dx ;从最高位开始恢复余数

add dl,'0' ;输出

call putc

p_1: ret

printax endp

puts proc

mov ah,9

int 21h

ret

puts endp

putc proc

mov ah,2

int 21h

ret

putc endp

ten dw 10

mydata db 3 dup ()

msg0 db 13,10,'Enter your numbers, you can only input up to 3 decimal digits for each number'

db 13,10,'Press Backspace key before pressing Enter to edit your input'

db 13,10,'Press Enter at an empty line to terminate input and start to dump odd numbers'

msg1 db 13,10,'Buffer boundary reached, force to start dumping odd numbers',13,10,10,36

msg2 db 13,10,10,'All odd number(s) among your data:'

crlf db 13,10,36

bksp db 8,' ',8,36

tab db 9,36

array dw maxcnt dup()

code ends

end main

在配置文件中更改。

打开tiny的配置文件proguard-rulespro,在文件中左上角点击添加功能,然后点击混淆的类或方法即可,点击混淆后要注意保存配置文件并重新编译项目。

Tiny是一款免费的文本编辑器,支持多种编程语言,包括C、C++、Java、Python等。

my_StringBufferdelete(0,sb_length); //删除字符串从0~sb_length-1处的内容(这个方法就是用来清除StringBuffer中的内容的) 还有另外一种方式

my_StringBuffersetLength(0); //设置StringBuffer变量的长度为0

最后,可以用my_StringBuffer = new StringBuffer()

重新将一个空的StringBuffer赋给my_StringBuffer 变量 StringBuffer my_StringBuffer = new StringBuffer(); my_StringBufferappend('helloworld'); //添加字符串到StringBuffer中 int sb_length = my_StringBufferlength();// 取得字符串的长度

my_StringBufferdelete(0,sb_length); //删除字符串从0~sb_length-1处的内容(这个方法就是用来清除StringBuffer中的内容的) 还有另外一种方式

my_StringBuffersetLength(0); //设置StringBuffer变量的长度为0

最后,可以用my_StringBuffer = new StringBuffer()

;方法一:传统完整段定义结构

;利用DOS系统功能调用(INT 21H中断的4C功能)返回DOS

;

;程序框架结构(必不可少的语句)如下:

;data segment

;

;data ends

;stack segment para stack

;

;stack ends

;coseg segment

; assume cs:coseg,ds:data,ss:stack

;start:

; mov ax,data

; mov ds,ax

;

; mov ah,4ch

; int 21h

; (或者用INT 20H代替以上两行)

;coseg ends

; end start

;-------------------------------------------------------

;举例

;LEA,LDS,LES指令的练习

;题目:在DEBUG下单步运行下列程序的可执行程序,观察每步寄存器的内

;容是否与实际相符。程序如下:

data1 segment

table1 db 30h,31h,32h,33h,34h,35h,36h,37h

db 38h,39h,41h,42h,43h,44h,45h,46h

num1 db 61h,62h,63h,64h,65h,66h,67h,68h

data1 ends

data2 segment

table2 db 30h,31h,32h,33h,34h,35h,36h,37h

db 38h,39h,41h,42h,43h,44h,45h,46h

num2 db 68h,67h,66h,65h,64h,63h,62h,61h

data2 ends

stack1 segment para stack

dw 20h dup(0)

stack1 ends

coseg segment

assume cs:coseg,ds:data1,es:data2,ss:stack1

start:

mov ax,data1 ;1

mov ds,ax ;2

mov ax,data2 ;3

mov es,ax ;4

mov bx,offset num1 ;5==8

mov sp,[bx] ;6

xor bx,bx ;7

lea bx,num1 ;8==9

lea sp,[bx] ;9

xor bx,bx ;10

lea bx,num1

lds si,[bx]

lea bx,num2

les di,es:[bx]

mov ah,4ch

int 21h

coseg ends

end start

;

;方法二:简化段定义结构

;程序应在MASM 50,最好在MASM 60版下运行。

;利用DOS系统功能调用(INT 21H中断的4C功能)返回DOS

;

;程序框架结构(必不可少的语句)如下:

;TITLE text

;NAME module_name

;MODEL SMALL

;DATA [NAME]

;

;STACK [SIZE]

;CODE [NAME]

;start:

; mov ax,@data

; mov ds,ax

;

; mov ax,4c00h

; int 21h

;(或者用EXIT [Return_value]代替以上两行)

;(或者用INT 20H代替以上两行)

; END START

;举例

;题目:求两个数的和,结果存储到指定内存单元。

;要求:在DEBUG下单步运行下列程序的可执行程序,观察每步寄存器的内

;容和存放结果的内存单元。程序如下:

TITLE ADDER

MODEL SMALL

DATA

OPR1 DW 12

OPR2 DW 24

RESULT DW

CODE

START:

MOV AX,@DATA

MOV DS,AX

MOV AX,OPR1

ADD AX,OPR2

MOV RESULT,AX

EXIT

END START

;方法三:程序段前缀结构:

; ①将应用程序定义成一个过程,其属性为FAR。

; ②在程序开始处保存PSP段地址和零偏移地址,即保护现场。

; ③在程序结束处使用RET指令返回DOS 。

;

;程序框架结构(必不可少的语句)如下:

;STACK SEGMENT PARA STACK 'STACK'

;

;STACK ENDS

;DATA SEGMENT PARA 'DATA'

;

;DATA ENDS

;CODE SEGMENT PARA 'CODE'

; ASSUME CS:CODE,DS:DATA,SS:STACK

;MAIN PROC FAR

;START: PUSH DS

; XOR AX,AX

; PUSH AX

; MOV AX,DATA

; MOV DS,AX

;

; RET

;MAIN ENDP

;CODE ENDS

; END START

;-------------------------------------------------------

;举例

;MOVSB指令的练习

;题目:在数据段中有一个字符串,将其复制到数据段的另一缓冲

;区中。程序如下:

STACK SEGMENT PARA STACK 'STACK'

DB 1024 DUP()

STACK ENDS

DATA SEGMENT PARA 'DATA'

HELLO DB 'Hello,world!',0dh,0ah,'$'

OK DB 16 DUP()

DATA ENDS

CODE SEGMENT PARA 'CODE'

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

MAIN PROC FAR

START: PUSH DS

XOR AX,AX

PUSH AX

MOV AX,DATA

MOV DS,AX

MOV ES,AX

MOV SI,OFFSET HELLO

MOV DI,OFFSET OK

MOV CX,OK-HELLO

; REP MOVSB

REP MOVS ES:BYTE PTR[DI],DS:[SI]

LEA DX,HELLO

MOV AH,9

INT 21H

RET

MAIN ENDP

CODE ENDS

END START

;方法四:COM文件格式。要求如下:

; ①COM文件不允许分段,程序大小不允许超过64KB。

; ②程序运行的起始点必须是100H,其前256个字节为程序段前缀所在地。

; ③不必设置堆栈段,程序装入后自动把SP建立在该段之末。

; ④对于所有过程则应定义为NEAR属性。

;

;程序框架结构如下:

;CODE SEGMENT

; ORG 100H

; ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE

;MAIN PROC NEAR

;START:

; (程序代码部分)

;

; MOV AX,4C00H

; INT 21H

; (或者用INT 20H代替以上两行)

;

; (数据定义部分)

;

;MAIN ENDP

;CODE ENDS

; END START

;---------------------------------------------------

;对于MASM 50或MASM 60版也可采用如下程序框架结构:

;标题部分

;model tiny

;code

;

org 100H

;START: jmp begin

;

; (数据定义部分)

;

begin:

;

; (程序代码部分)

;

; MOV AX,4C00H

; INT 21H

; (或者用INT 20H代替以上两行)

; END START

;-------------------------------------------------------

;举例

;分支程序设计练习

;题目:将BX寄存器的内容以二进制格式显示在屏幕上,程序如下:

code segment

ORG 100H

ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE

MAIN PROC NEAR

begin: mov bx,1234h

mov cx,16

loop1: mov dl,'0'

rcl bx,1

jnc disp

mov dl,'1'

disp: mov ah,2

int 21h

loop loop1

mov ah,4ch

int 21h

MAIN ENDP

CODE ENDS

END begin

以上就是关于在ubuntu12.04下安装tinyos2.1.1最后编译Blink应用程序全部的内容,包括:在ubuntu12.04下安装tinyos2.1.1最后编译Blink应用程序、tiny如何使用v2订阅、汇编语言求程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/10109238.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存