用ARM汇编语言设计程序实现求和1+2+3+4+……+100 能教我吗

用ARM汇编语言设计程序实现求和1+2+3+4+……+100 能教我吗,第1张

我这个是键盘输入然后求和十进制显示的

这是自动生成的代码模板

STACKS SEGMENT STACK 堆栈段

DW128 DUP(?) 注意这里只有128个字节

STACKS ENDS

DATAS SEGMENT 数据段

请在这里定义您的数据FLAG DB0

RE DW0

DATAS ENDS

CODES SEGMENT 代码段

ASSUMECS:CODES,DS:DATAS

START: MOV AX,DATAS初始化

MOV DS,AX

请在这里添加您的代码

PART1: MOV AH ,01H 键盘输入0~100任意数

INT 21H

CMP AL,0DH

JZPART2

SUB AL,'0'

PUSH AX

MOV AX,RE

SHL AX,1

PUSH AX

MOV CL,2

SHL AX,CL

POP BX

ADD AX,BX

POP BX

MOV BH,0

ADD AX,BX

MOV RE,AX

JMP PART1

PART2: MOV AX,RE

PART3: MOV CX,AX 求和

DEC AX

ADD RE,AX

LOOP PART3

MOV AX,RE

MOV CX,0十进制显示

MOV BX,10

PART4: MOV DX,0

DIV BX

ADD DL,30H

PUSH DX

INC CX

CMP AX,0

JNZ PART4

PART5: POP DX

MOV AH,2

INT 21H

LOOP PART5

MOV AX,4C00H退出程序

INT 21H

CODES ENDS

END START

直接复制过去用吧

你这个需求可以使用popen()来实现。

FILE * file = popen("/linphonec", "w")

...

fwrite("call xxxx\r\n", 11, file)

fwrite("terminate\r\n", 11, file)

...

pclose(file)

你可以在QT的按钮slot里向file写入命令,这些命令就能传到linphone的stdin。

这么做的不足 1. popen只能打开单向管道 因此你读不到linphone的输出结果。2. popen在较低版本的uclibc上不是thread safe的

变通的办法是你改一下linphone,调用freopen来重定向自己的stdin和stdout

不过我觉得你最好还是改改linphone,集成到你的QT程序里算了,也不麻烦

其实这个 就是通过移位 和 逻辑运算

然后给寄存器赋值

解释下 第一句rGPFCON &= ~((3<<GPF0_CON)|(3<<GPF1_CON)

|(3<<GPF2_CON)|(3<<GPF4_CON))

意思是

1:0x03左移GPF0_CON 或上 0x03左移GPF1_CON 或上0x03左移GPF2_CON 或上0x03左移GPF4_CON这些值运算后 假设得到X

2:rGPFCON =rGPFCON &(~X) 这样 就间接的给 rGPFCON 赋值

一般来说 想给寄存器 某一位 置1 应该采用或运算

想给寄存器 某一位清零 应该采用与运算

举个一目了然的例子

将rGPFCON 第3位置1

rGPFCON |=1<<3 //rGPFCON 或 0000 1000

将rGPFCON 第3位清零

rGPFCON &=~(1<<3) //rGPFCON 与 1111 0111

这样应该能明白了吧


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

原文地址: http://outofmemory.cn/yw/12111626.html

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

发表评论

登录后才能评论

评论列表(0条)

保存