��ǰλ�ã���ҳ > Ƕ��ʽ��ѵ > Ƕ��ʽѧϰ > ��ʦ���� > ARMָ����

ARMָ���� ʱ�䣺2019-08-09      ��Դ����ɳ���ģ�����ʦ

һ���������߼�ָ��

1. ADC : ����λ�ļӷ�

(Addition with Carry)

ADC{����}{S}  <dest>, <op 1>, <op 2>

             dest = op_1 + op_2 + carry

ADC �������������������������ѽ�����õ�Ŀ�ļĴ����С���ʹ��һ����λ��־λ�������Ϳ������� 32 λ��ļӷ����������ӽ������� 128 λ������ 

128 λ���: �Ĵ��� 0��1��2���� 3 

��һ�� 128 λ��: �Ĵ��� 4��5��6���� 7 

�ڶ��� 128 λ��: �Ĵ��� 8��9��10���� 11��

ADDS    R0, R4, R8              ; �ӵͶ˵���

ADCS    R1, R5, R9              ; ����һ���֣�����λ

ADCS    R2, R6, R10             ; �ӵ������֣�����λ

ADCS    R3, R7, R11             ; �Ӹ߶˵��֣�����λ

������Ҫ�������ļӷ�����Ҫ�������� S ��׺�����Ľ�λ��־��

2. ADD : �ӷ�

(Addition)

ADD{����}{S}  <dest>, <op 1>, <op 2>

                dest = op_1 + op_2

ADD �����������������������ѽ�����õ�Ŀ�ļĴ����С������� 1 ��һ���Ĵ����������� 2 ������һ���Ĵ���������λ�ļĴ�������һ������ֵ:

ADD     R0, R1, R2              ; R0 = R1 + R2

ADD     R0, R1, #256            ; R0 = R1 + 256

ADD     R0, R2, R3,LSL#1        ; R0 = R2 + (R3 << 1)

�ӷ��������з��ź��޷������Ͻ��С�

3. AND : �߼���

(logical AND)

AND{����}{S}  <dest>, <op 1>, <op 2>

             dest = op_1 AND op_2

AND ���������������Ͻ����߼��룬�ѽ�����õ�Ŀ�ļĴ����У���������Ҫ�����湤����λ�����á� ������ 1 ��һ���Ĵ����������� 2 ������һ���Ĵ���������λ�ļĴ�������һ������ֵ:

AND     R0, R0, #3              ; R0 = ���� R0 ��λ 0 �� 1�����������λ��

AND ����ֵ��(���߶��� 1 ����Ϊ 1):

Op_1 Op_2 ���

000
010
100
111

4. BIC : ��

(Bit Clear)

BIC{����}{S}  <dest>, <op 1>, <op 2>

            dest = op_1 AND (!op_2)

BIC ����һ���������λ��һ�ַ������� OR λ�������෴�IJ����������� 2 ��һ�� 32 λλ����(mask)����������������������ijһλ���������һλ��δ���õ�����λָʾ��λ���ֲ��䡣

BIC     R0, R0, #%1011          ; ��� R0 �е�λ 0��1���� 3����������IJ��䡣

BIC ��ֵ�� :

Op_1 Op_2 ���

000
010
101
110

��ע���߼����ʽΪ Op_1 AND NOT Op_2 

5. EOR : �߼����

(logical Exclusive OR)

EOR{����}{S}  <dest>, <op 1>, <op 2>

             dest = op_1 EOR op_2

EOR ���������������Ͻ����߼���򣬰ѽ�����õ�Ŀ�ļĴ����У��Է�ת�ض���λ���á������� 1 ��һ���Ĵ����������� 2 ������һ���Ĵ���������λ�ļĴ�������һ������ֵ:

EOR     R0, R0, #3              ; ��ת R0 �е�λ 0 �� 1

EOR ��ֵ��(���߲�ͬ����Ϊ 1):

Op_1 Op_2 ���

000
011
101
110

6. MOV : ����

(Move)

MOV{����}{S}  <dest>, <op 1>

              dest = op_1

MOV ����һ���Ĵ���������λ�ļĴ�������һ������ֵװ��һ��ֵ��Ŀ�ļĴ����������ָ����ͬ�ļĴ�����ʵ�� NOP ָ���Ч�����㻹����ר����λһ���Ĵ���:

MOV     R0, R0                  ; R0 = R0... NOP ָ��

MOV     R0, R0, LSL#3           ; R0 = R0 * 8

��� R15 ��Ŀ�ļĴ��������޸ij�����������־�������ڷ��ص����ô��룬�����ǰ����ӼĴ��������ݴ��͵� R15:

MOV     PC, R14                 ; �˳���������

MOVS    PC, R14                 ; �˳��������߲��ָ���־λ

 (����� 32-bit ��ϵ) 

7. MVN : ����ȡ����ֵ

(MoveNegative)

MVN{����}{S}  <dest>, <op 1>

              dest = !op_1

MVN ����һ���Ĵ���������λ�ļĴ�������һ������ֵװ��һ��ֵ��Ŀ�ļĴ�������֮ͬ�����ڴ���֮ǰλ����ת�ˣ����԰�һ����ȡ����ֵ���͵�һ���Ĵ����С������߼��Dz����������������������ȡ����ֵ�� 1 ��������ȡ����ֵ:

MVN     R0, #4                  ; R0 = -5

MVN     R0, #0                  ; R0 = -1

8. ORR : �߼���

(logical OR)

ORR{����}{S}  <dest>, <op 1>, <op 2>

             dest = op_1 OR op_2

OR ���������������Ͻ����߼��򣬰ѽ�����õ�Ŀ�ļĴ����У��������ض���λ���á������� 1 ��һ���Ĵ����������� 2 ������һ���Ĵ���������λ�ļĴ�������һ������ֵ:

ORR     R0, R0, #3              ; ���� R0 ��λ 0 �� 1

OR ��ֵ��(�����д��� 1 ����Ϊ 1):

Op_1 Op_2 ���

000
011
101
111

9. RSB : �������

(Reverse Subtraction)

RSB{����}{S}  <dest>, <op 1>, <op 2>

             dest = op_2 - op_1

SUB �ò����� two ��ȥ������ one���ѽ�����õ�Ŀ�ļĴ����С������� 1 ��һ���Ĵ����������� 2 ������һ���Ĵ���������λ�ļĴ�������һ������ֵ:

RSB     R0, R1, R2              ; R0 = R2 - R1

RSB     R0, R1, #256            ; R0 = 256 - R1

RSB     R0, R2, R3,LSL#1        ; R0 = (R3 << 1) - R2

��������������з��Ż��޷������Ͻ��С�

10. RSC : ����λ�ķ������

(Reverse Subtraction with Carry)

RSC{����}{S}  <dest>, <op 1>, <op 2>

             dest = op_2 - op_1 - !carry

ͬ�� SBC����������������������ǰ��λ�á�

11. SBC : ����λ�ļ���

(Subtraction with Carry)

SBC{����}{S}  <dest>, <op 1>, <op 2>

             dest = op_1 - op_2 - !carry

SBC �������������ļ������ѽ�����õ�Ŀ�ļĴ����С���ʹ�ý�λ��־����ʾ��λ�������Ϳ��������� 32 λ�ļ�����SUB �� SBC ���ɽ�λ��־�ķ�ʽ��ͬ�ڳ��棬�����Ҫ��λ�������λ��־�����ԣ�ָ��Ҫ�Խ�λ��־����һ���Dz��� - ��ָ��ִ���ڼ��Զ��ķ�ת��λ��

12. SUB : ����

(Subtraction)

SUB{����}{S}  <dest>, <op 1>, <op 2>

                dest = op_1 - op_2

SUB �ò����� one ��ȥ������ two���ѽ�����õ�Ŀ�ļĴ����С������� 1 ��һ���Ĵ����������� 2 ������һ���Ĵ���������λ�ļĴ�������һ������ֵ:

SUB     R0, R1, R2              ; R0 = R1 - R2

SUB     R0, R1, #256            ; R0 = R1 - 256

SUB     R0, R2, R3,LSL#1        ; R0 = R2 - (R3 << 1)

�����������з��ź��޷������Ͻ��С�

 

������λָ��

ARM �������齨�˿��������ݴ���ָ��(ADC��ADD��AND��BIC��CMN��CMP��EOR��MOV��MVN��ORR��RSB��SBC��SUB��TEQ��TST)һ��ʹ�õ�Ͱʽ��λ��(barrel shifter)���㻹����ʹ��Ͱʽ��λ��Ӱ���� LDR/STR �����еı�ֵַ��

��ע����λ������ ARM ָ��в���Ϊ������ָ��ʹ�ã�����ָ���ʽ����һ���ֶΣ��ڻ�������б�ʾΪָ���е�ѡ�������ݴ���ָ��ĵڶ������������ߵ�һ���ݴ���ָ���еı�ַ�ǼĴ���������Զ������и�����λ������������ݴ���ָ��ĵڶ���������������ֵ����ָ������ 8 λ����ֵ�� 4 λѭ����λ����ʾ�������ԶԴ��� 255 ������ֵ�����������ͨ����ָ��������ѭ����λ��������ʾ����������ܱ�ʾ������һ���������߼���ָ���У��߼�����ָ����ָ���� S λ�����û������ȷ���Ƿ�Ӱ���λ��־�����Ƚ�ָ��� S λ�������õġ��ڵ�һ���ݴ���ָ����ָ����λ������ֻ��������ֵ�������üĴ�����

�����Ǹ���ͬ����λ���͵��������Ƿ�:

LSL  �߼�����

ASL  ��������

LSR  �߼�����

ASR  ��������

ROR  ѭ������

RRX  ����չ��ѭ������

ASL �� LSL �ǵ�ͬ�ģ��������ɻ�����

�������һ������ֵ(�� 0 �� 31)ָ����λ���������ð����� 0 �� 31 ֮���һ��ֵ�ļĴ���ָ����λ������

 

1.LSL/ASL : �߼�����������

(Logical or Arithmetic Shift Left)

Rx, LSL #n    or

Rx, ASL #n    or

Rx, LSL Rn    or

Rx, ASL Rn

���� Rx �����ݲ�����‘n’���ڼĴ��� Rn ��ָ�������������Чλ������λ�������Чλ��������䡣���˸����ϵĵ� 33 λ(���DZ��Ƴ�����С����λ)֮�ⶪ���Ƴ�����˵ĸ�λ������߼���ָ���� S λ�������ˣ����λ����Ϊ��Ͱʽ��λ���˳�ʱ��λ��־��ֵ��

��������:

MOV    R1, #12

MOV    R0, R1, LSL#2

���˳�ʱ��R0 �� 48�� ��Щָ���γɵ��ܺ��� R0 = #12, LSL#2 ��ͬ�� BASIC �� R0 = 12 << 2

2.LSR : �߼�����

(Logical Shift Right)

Rx, LSR #n    or

Rx, LSR Rn

���ڸ�������������ԡ�������λ�������Чλ�����ƶ�������߼���ָ���� S λ�������ˣ��������Ƴ����Ҷ˵���λ���õ���λ��־�С���ͬ�� BASIC �� register = value >>> shift��

3.ASR : ��������

(Arithmetic Shift Right)

Rx, ASR #n    or

Rx, ASR Rn

������ LSR����ʹ��Ҫ����λ�ļĴ���(Rx)�ĵ� 31 λ��ֵ������λ���������������ʾ�еķ��š�����߼���ָ���� S λ�������ˣ��������Ƴ����Ҷ˵���λ���õ���λ��־�С���ͬ�� BASIC �� register = value >> shift��

4.ROR : ѭ������

(Rotate Right)

Rx, ROR #n    or

Rx, ROR Rn

ѭ�������������߼����ƣ����ǰѴ��Ҳ��Ƴ�ȥ��λ���õ���࣬����߼���ָ���� S λ�������ˣ���ͬʱ���õ���λ��־�У������λ��‘ѭ��’��һ����λ��Ϊ 32 �IJ��������������������ȫһ�£���Ϊ����λ������λ�� 32 ��λ�ã��ֻص��˿�ʼʱ��λ��!

5.RRX : ����չ��ѭ������

(Rotate Right with extend)

Rx, RRX

����һ�� ROR#0 �������������ƶ�һ��λ�� - ��֮ͬ���ǣ���ʹ�ô������Ľ�λ��־���ṩһ��Ҫ����λ�� 33 λ�������� 

ת��ע:���Ĵ�������ѭ������һλ����λ��ԭ����C�� ��䣬�Ƴ��������Чλ����C��

�����˷�ָ��

ָ���ʽ

������ָ������ͨ����ָ���ڶԲ�������������������ͬ:

���������в���������Ŀ�ļĴ�������Ϊ�򵥵ļĴ����� 

�㲻�ܶԲ����� 2 ʹ������ֵ����λ�ļĴ����� 

Ŀ�ļĴ����Ͳ����� 1

����㲻��ָ�� R15 ΪĿ�ļĴ�����

1.MLA : ���ۼӵij˷�

(Multiplication with Accumulate)

MLA{����}{S}  <dest>, <op 1>, <op 2>, <op 3>

              dest = (op_1 * op_2) + op_3

MLA ����Ϊͬ�� MUL�������Ѳ����� 3 ��ֵ�ӵ�����ϡ��������ܺ�ʱ���á�

 

2.MUL : �˷�

(Multiplication)

MUL{����}{S}  <dest>, <op 1>, <op 2>

                dest = op_1 * op_2

MUL �ṩ 32 λ�����˷���������������з��ŵģ����Լٶ����Ҳ���з��ŵġ�

�Ƚ�ָ��

ָ���ʽ

��ע��CMN �� CMP ������ָ�TEQ �� TST ���߼�ָ������ǹ���һ���ԭ�������ǵ� S λ�������õģ�����˵����������Ӱ���־λ��

3.CMN : �Ƚ�ȡ����ֵ

(Compare Negative)

CMN{����}{P}  <op 1>, <op 2>

                status = op_1 - (- op_2)

CMN ͬ�� CMP��������������С��ֵ(������ 2 ��ȡ����ֵ)���бȽϣ�������������������ʵ�ֵ����ڽ����б�� -1�������� -1 �ȽϽ�ʹ��:

CMN     R0, #1                  ; �� R0 �� -1 ���бȽ�

������� CMP ָ�

4.CMP : �Ƚ�

(Compare)

CMP{����}{P}  <op 1>, <op 2>

                status = op_1 - op_2

CMP �����һ���Ĵ�������������һ���Ĵ��������ݻ�����ֵ���бȽϣ�����״̬��־�������������ִ�С�������һ�μ����������洢�����������ȷ�ĸ��ı�־����־��ʾ���Dz����� 1 �Ȳ����� 2 ���(��С��)����������� 1 ���ڲ��������� 2����˺���� GT ��׺��ָ�����ִ�С� 

���Եģ��㲻��Ҫ��ʽ��ָ�� S ��׺������״̬��־… �����ָ�������򱻺��ԡ�

5.TEQ : ���Եȼ�

(Test Equivalence)

TEQ{����}{P}  <op 1>, <op 2>

                Status = op_1 EOR op_2

TEQ ������ TST������������ĸ����ϵļ����� EOR ������ AND�����ṩ��һ�ֲ鿴�����������Ƿ���ͬ���ֲ�Ӱ���λ��־(���� CMP����)�ķ��������� P ��׺�� TEQ �������ڸı� R15 �еı�־(�� 26-bit ģʽ��)����������� psr.html���� 32-bit ģʽ���������μ����

6.TST : ����λ

(Test bits)

TST{����}{P}  <op 1>, <op 2>

                Status = op_1 AND op_2

TST ������ CMP�����������õ�Ŀ�ļĴ����еĽ���������ڸ����������������Ͻ��в������ѽ����ӳ��״̬��־�ϡ�ʹ�� TST ������Ƿ��������ض���λ�������� 1 ��Ҫ���Ե������ֶ������� 2 ��һ��λ���롣�������Ժ����ƥ�������� Zero ��־��������������� CMP �������㲻��Ҫָ�� S ��׺��

TST     R0, #%1                 ; ������ R0 ���Ƿ�������λ 0��

�ġ���ָ֧��

ת��ע��B��BL��ʵ���Ǻ�����ڵ���ת֮��Ķ����ˣ��������˵�����Ŀ�����������

1.B : ��֧

(Branch)

B{����}  <��ַ>

B ����򵥵ķ�֧��һ������һ�� B ָ�ARM ��������������ת�������ĵ�ַ�����������ִ�С� 

ע��洢�ڷ�ָ֧���е�ʵ�ʵ�ֵ����Ե�ǰ�� R15 ��ֵ��һ��ƫ������������һ�����Ե�ַ�� 

����ֵ�ɻ���������㣬���� 24 λ�з�������������λ���з�����չΪ 32 λ����ʾ����Чƫ��Ϊ 26 λ(+/- 32 M)�� 

�������������ϣ�����ܾ�������������ָ��:

OPT     1

LDA     &70

CMP     #0

BEQ     Zero

STA     &72

.Zero   RTS

 (ȡ�� Acorn Electron User Guide issue 1 page 213) 

�� ARM �������ϣ����ǽ����������Щ����:

OPT     1

ADR     R1, #&70

LDR     R0, [R1]

CMP     #0

BEQ     Zero

STR     R0, [R1, #2]

.Zero

MOV     PC, R14

�ⲻ��һ���ܺõ����ӣ�������Թ�����θ��õ�ȥ����ִ�ж����Ƿ�֧����һ���棬������д�εĴ��������Ĵ���ʹ��״̬��־����ô�����ʹ������ִ����ʵ�ָ����֧: ����һ����һ�ļ�����ִ��ָ���������������������д��ڵ�������Щ��֧����תָ�

OPT     1

ADR     R1, #&70

LDR     R0, [R1]

CMP     R0, #0

STRNE   R0, [R1, #2]

MOV     PC, R14

ת��ע����ο�����

2.BL : �����ӵķ�֧

(Branch with Link)

BL{����}  <��ַ>

BL ����һ����ָ֧����ڷ�֧֮ǰ���ڼĴ��� 14 ��װ���� R15 �����ݡ����������װ�� R14 �� R15 �������ص��������֧֮����Ǹ�ָ�

���������̵�һ��������ǿ����ʵ�֡�������������Ļװ���� 2 (���� 4)�е��Ժܺõ�չ��…

.load_new_format

      BL     switch_screen_mode

      BL     get_screen_info

      BL     load_palette

    .new_loop

      MOV    R1, R5

      BL     read_byte

      CMP    R0, #255

      BLEQ   read_loop

      STRB   R0, [R2, #1]!

…���������Ǽ�����װ����ѭ��֮ǰ���������������̡����ţ�һ������������ִ�о���ѭ���е����� read_byte �����̡�

����ִ��

ARM ��������һ���dz��������������������ִ�С�����ָ�IJ��ǻ����������λ���֧��ARM ʹ����߼��׶ν�һ���Ϊ�����λ�� XXX- ����� XXX ���κζ����� 

Ϊ�˾����������� Intel 8086 ��������ָ֧���һ���б�:

JA Jump if Above

JAE Jump if Above or Equal

JB Jump if Below

JBE Jump if Below or Equal

JC Jump if Carry

JCXZ Jump if CX Zero (CX is a register that can be used for loop counts)

JE Jump if Equal

JG Jump if Greater than

JGE Jump if Greater than or Equal

JL Jump if Less than

JLE Jump if Less Than or Equal

JMP JuMP

JNA Jump if Not Above

JNAE Jump if Not Above or Equal

JNB Jump if Not Below

JNBE Jump if Not Below or Equal

JNC Jump if No Carry

JNE Jump if Not Equal

JNG Jump if Not Greater than

JNGE Jump if Not Greater than or Equal

JNL Jump if Not Less than

JNLE Jump if Not Less than or Equal

JNO Jump if Not Overflow

JNP Jump if Not Parity

JNS Jump if Not Sign

JNZ Jump if Not Zero

JO Jump if Overflow

JP Jump if Parity

JPE Jump if Parity Even

JPO Jump if Parity Odd

JS Jump if Sign

JZ Jump if Zero

80386 �����:

JECXZ Jump if ECX Zero

��Ϊ�Աȣ�ARM ������ֻ�ṩ��:

B ��֧

BL �����ӵķ�֧

�� ARM �ṩ������ִ�У�����Բ�����������ϲ����ķ�ʽ������:

BEQ Branch if EQual

BNE Branch if Not Equal

BVS Branch if oVerflow Set

BVC Branch if oVerflow Clear

BHI Branch if HIgher

BLS Branch if Lower or the Same

BPL Branch if PLus

BMI Branch if MInus

BCS Branch if Carry Set

BCC Branch if Carry Clear

BGE Branch if Greater than or Equal

BGT Branch if Greater Than

BLE Branch if Less than or Equal

BLT Branch if Less Than

BLEQ Branch with Link if EQual 

….

BLLT Branch with Link if Less Than

�����������룬

AL - ALways��ȱʡ�������Բ���ָ��

NV - NeVer�����Ƿdz����á���������β�Ҫʹ���������…

���㷢������ Bxx ָ��ʵ������ͬһ��ָ���ʱ�򣬽�Ҫ��ͷ�͵��ˡ� 

��������룬����������һ����ָ֧���ϼ���������Щ��������ô��һ���Ĵ���װ��ָ���ܷ��������? ���ǿ��ԡ� 

�����ǿɻ�õ�����������б�: 

EQ : ���� 

���һ�αȽ�֮�������� Z ��־�� �� 

NE : ������ 

���һ�αȽ�֮������� Z ��־�� �� 

VS : ������� 

�����һ����������֮�������� V ��־������Ľ�����ʺϷ���һ�� 32bit Ŀ��Ĵ����С� �� 

VC : ������ 

�������� V ��־���� VS �෴�� �� 

HI : ����(�޷���) 

���һ�αȽ�֮�������� C ��־������� Z ��־��  

LS : ���ڻ�ͬ��(�޷���) 

���һ�αȽϲ���֮������� C ��־�������� Z ��־�� �� 

PL : ���� 

���һ����������֮������� N�����ڶ���‘����’��Ŀ�ģ�����������ԭ���������Ǹ���…  

MI : ���� 

���һ����������֮�������� N ��־�� �� 

CS : ��λ���� 

���һ��������������λ����֮�������� C ��־�������Ľ�����ܱ�ʾΪ 32bit������԰� C ��־��������ĵ� 33 λ�� �� 

CC : ��λ��� 

�� CS �෴�� �� 

GE : ���ڻ����(�з���) 

���һ�αȽ�֮��… 

������ N ��־�������� V ��־ 

����… 

����� N ��־������� V ��־�� �� 

GT : ����(�з���) 

���һ�αȽ�֮��… 

������ N ��־�������� V ��־ 

����… 

����� N ��־������� V ��־ 

����… 

����� Z ��־�� �� 

LE : С�ڻ����(�з���) 

���һ�αȽ�֮��… 

������ N ��־������� V ��־ 

����… 

����� N ��־�������� V ��־ 

����… 

������ Z ��־�� �� 

LT : С��(�з���) 

���һ�αȽ�֮��… 

������ N ��־������� V ��־�� 

����… 

����� N ��־�������� V ��־��  

AL : ���� 

ȱʡ���������Բ������������� �� 

NV : �Ӳ� 

�����ر����ã�����ʾӦ����Զ��ִ�����ָ������˵� NOP�� 

���� NV ��Ϊ��������(�� AL ���)���㲻Ӧ������Ĵ�����ʹ������ 

��һ���������������� S�������෴�ķ�ʽ������������һ��ָ���ʱ�򣬵��¸���״̬��־���ⲻ���Զ������� - ������Щָ���Ŀ��������״̬������: 

ADD     R0, R0, R1

ADDS    R0, R0, R1

ADDEQS  R0, R0, R1

��һ��������һ�������ļӷ�(�� R1 ��ֵ���ӵ� R0)������Ӱ��״̬�Ĵ����� 

�ڶ���������ͬһ���ӷ���ֻ���������¸���״̬�Ĵ����� 

���һ��������ͬһ���ӷ�������״̬�Ĵ�������ͬ��������һ����������ָ�ֻ��ǰһ�������Ľ���� EQ (��������� Z ��־)��ʱ������ִ�С�

����������ִ�е�һ�������е����ӡ���ѼĴ��� 0 ��洢�ڼĴ��� 10 ��������Ƚϡ�

��������� R10�������һ������жϣ�����������֧�����ٴ�����Щ��������� R10 �����ص����������Dz��ִ���(���ĵ�ַ�洢�� R14)��

\ ����ִ�е�һ������

  .loop                           ; ���ѭ����ʼλ��

  CMP     R0, R10                 ; �� R0 �� R10 ��Ƚ�

  SWINE   &40017                  ; ������: ���� SWI &40017

  ADDNE   R0, R0, #1              ;         �� R0 �� 1

  BNE     loop                    ;         ��֧�� 'loop'

  MOV     R10, #0                 ; ����  : ���� R10 Ϊ��

  LDMFD   R13!, {R0-R12,PC}       ;         ���ص�������

ע��: 

SWI ��ž�����д���������� RISC OS �£����Ǹ� Econet_DoImmediate �ı�š���Ҫ����Ľ���������ֻ��һ������!

�������ǰû���� LDMFD������ջ��װ�ض���Ĵ���������������У����Ǵ�һ����ȫ��ʽ��ջ��װ�� R0 �� R12 �� R14�����ڼĴ���װ�غʹ洢�ĸ�����Ϣ����� str.html��

��˵Ҫװ�� R14����ôΪʲôҪ�������� PC ��? ԭ���Ǵ�ʱ R14 �洢��ֵ�������ص�ַ������Ҳ���Բ���:

LDMFD      R13!, {R0-R12,R14}

MOV        PC, R14

����ֱ�ӻָ��� PC �п���ʡ����� MOV ��䡣

�����Щ�Ĵ������п��ܱ�һ�� SWI ������ռ��(�������ڵ����ڼ�ִ�еĴ���)����������ð������Ҫ�ļĴ���ѹ��ջ�У��Ժ��ڻָ����ǡ�

SWI ָ��

SWI : ����ж�

(Software Interrupt)

SWI{����}  <24 λ���>

ָ���ʽ 

����һ���򵥵���ʩ������������õġ���������ϵͳ��ʩ���� SWI �ṩ�ġ�û�� SWI �� RISC OS �Dz�������ġ�

Nava Whiteford ������ SWI ����ι�����(����� Frobnicate issue 12?)…

SWI ��ʲô?

SWI ��ʾ Software Interrupt���� RISC OS ��ʹ�� SWI �����ʲ���ϵͳ���̻������������ģ�顣���Ӧ��ʹ��ģ����������Ӧ���ṩ�Ͳ��ⲿ���ʡ� 

SWI ��������:

�ļ��� SWI����������д���̡��������Եȡ�

��ӡ�������� SWI����������ʹ�ô�ӡ���ж˿ڡ�

FreeNet/Acorn TCP/IP Э��ջ SWI���� TCP/IP Э���� Internet �Ϸ��ͺͽ������ݡ�

�������ַ�ʽʹ�õ�ʱ��SWI �������ϵͳӵ��һ��ģ��ṹ������ζ���������������IJ���ϵͳ������Ĵ�����Ա��ָ�����С�IJ���(ģ��)��һ��ģ�鴦�����(handler)��

�� SWI �������õ����ض������̱�ŵ�һ�������ʱ�����ҵ�������̵�λ�ò�ִ������������(�йص�)�κ����ݡ�

����������?

���Ȳ鿴һ�����ʹ������һ�� SWI ָ��(�������)����������:

SWI &02

��

SWI "OS_Write0"

��Щָ��ʵ��������ͬ�ģ�����������ͬ��ָ�Ψһ�IJ�ͬ�ǵڶ���ָ��ʹ��һ���ַ�������ʾ SWI ��� &02�� 

��ʹ�ò������ַ�����ŵij����ʱ����ִ��֮ǰ���Ȳ�������ַ����� 

���������Dz��봦���ַ�������Ϊ�����ܸ�����Ҫ����ʲô��һ����ʵ��ʾ������ͨ����������һ������������̶ȣ�������ʵ��ִ�е�ָ�

�������ٴο�һ�µ�һ��ָ��:

SWI &02

����ʲô��˼? �������˼�ǽ��� SWI ������򲢴���ֵ &02���� RISC OS ������ζ��ִ�б���� &02 �����̡� 

���������ô����? ����δ��� SWI ��źͽ��� SWI �������?

�����鿴�ڴ�Ŀ�ʼ 32 �ֽ�(λ�� 0-&1C)�����������(�鿪ʵ�ʵ� ARM ָ��)�㽫��������:

��ַ ���� �����

00000000 : 0..? : E5000030 : STR     R0,[R0,#-48]

00000004 : .ó?? : E59FF31C : LDR     PC,&00000328

00000008 : .ó?? : E59FF31C : LDR     PC,&0000032C

0000000C : .ó?? : E59FF31C : LDR     PC,&00000330

00000010 : .ó?? : E59FF31C : LDR     PC,&00000334

00000014 : .ó?? : E59FF31C : LDR     PC,&00000338

00000018 : .ó?? : E59FF31C : LDR     PC,&0000033C

0000001C :  2?? : E3A0A632 : MOV     R10,#&3200000

��������ϸ��һ�¡� 

���˵�һ�������һ��ָ��֮��(�������������)������Ķ��ǰ�һ����ֵװ�ص� PC (���������)��ָ����Ǹ��߼����������ȥִ����һ��ָ�

��չʾ�����ֵ�Ǵ��ڴ��е�һ����ַ�������ġ�(������� !Zap ���˵���ʹ��“Read Memory”ѡ��ȥ�Լ��鿴һ�¡�)

�⿴���������� SWI û���ٹ�ϵ����������һ����˵����

һ�� SWI ������һ�о��ǰ�ģʽ�ı�ɳ����û������� PC ��ִ���ڵ�ַ &08 ������һ��ָ��!

�Ѵ�����ת���������û�ģʽ���л��������Ĵ��� r13 �� r14 ���� r13_svc �� r14_svc �滻���ǡ�

�ڽ��볬���û�ģʽ��ʱ�򣬻��� r14_svc ����Ϊ����� SWI ָ��֮��ĵ�ַ��

���ʵ���Ͼ���һ�����ӵ���ַ &08 �ķ�ָ֧��(BL &08)������������һЩ����(SWI ���)�Ŀռ䡣

����˵������������ַ &08 ������ת����һ����ַ��һ��ָ�����ʵ�ʵ� SWI ����ĵ�ַ!

��ʱ����ܻ���“�Ե�һ��! ���� SWI �����?”��ʵ���ϴ������������ֵ�����SWI �������ʹ�ô������� r14_svc ��ֵ����ȡ����

������������IJ���(�ڴ洢�Ĵ��� r0-r12 ֮��):

1.���� r14 �м�ȥ 4 ����� SWI ָ��ĵ�ַ��

2.�����ָ��װ�ص�һ���Ĵ�����

3.������ָ��ĸ߶� 8 λ��ȥ���� OpCode ��ֻʣ�µ� SWI ��š�

4.ʹ�����ֵ���ҵ�Ҫ��ִ�еĴ�������̵ĵ�ַ(ʹ�ò��ұ��)��

5.�ָ��Ĵ��� r0-r12��

6.ʹ�������뿪�����û�ģʽ��

7.��ת��������̵ĵ�ַ��

���װ�! ;) 

������һ�����ӣ����� ARM610 datasheet:

0x08 B Supervisor

EntryTable

DCD ZeroRtn

DCD ReadCRtn

DCD WriteIRtn

 ..

Zero   EQU 0

ReadC  EQU 256

WriteI EQU 512

; SWI ������Ҫ��������λ 8-23 �к�����(����еĻ�)��λ 0-7 �С�

; �ٶ� R13_svc ָ����һ�����ʵ�ջ

STMFD R13, {r0-r2 , R14}

 ; ���湤���Ĵ����ͷ��ص�ַ��

LDR R0,[R14,#-4]

 ; �õ� SWI ָ�

BIC R0,R0, #0xFF000000

 ; ����߶˵� 8 λ��

MOV R1, R0, LSR #8

 ; �õ�����ƫ������

ADR R2, EntryTable

 ; �õ���ڱ�(EntryTable)�Ŀ�ʼ��ַ��

LDR R15,[R2,R1,LSL #2]

 ; ��֧����ȷ������

WriteIRtn

 ; д R0 �е�λ 0 - 7 �е��ַ���

.............

 LDMFD R13, {r0-r2 , R15}^

 ; �ָ������ռ䣬�����ء��ָ�������ģʽ�ͱ�־��

����� SWI ָ��Ļ���������衣

 

��һƪ����׿ϵͳ�������

��һƪ��û����

�ȵ������Ƽ�
����ѧԱ��ҵ��
��нѧԱ�������
�ȵ������Ƽ�
ǰ̨ר�ߣ�010-82525158 ��ҵ��ѵǢ̸ר�ߣ�010-82525379 ԺУ����Ǣ̸ר�ߣ�010-82525379 Copyright © 2004-2018 ��������Զ���Ƽ���չ���޹�˾ ��Ȩ���� ����ICP��16055225�ţ�������������11010802025203��

�ص�����

X