1 / 15

5.5 汇编语言程序设计的基本方法

5.5 汇编语言程序设计的基本方法. 通常 , 编制一个汇编语言源程序应按如下步骤进行 : ⑴ 明确任务 , 确定算法。 ⑵ 绘制流程图。 ⑶ 根据流程图编写汇编语言程序。 ⑷ 上机调试程序。 程序的基本结构有四种:顺序结构、分支结构、循环结构和子程序结构。. 5.5.1 顺序程序设计. 开始. 顺序结构也称线性结构,其特点是其中的语句或结构被连续执行。 顺序程序是最简单的,也是最基本的一种程序结构。这种结构的程序从开始到结尾一直是顺序执行的,中途没有任何分支。从这种结构的流程图来看,除了有一个起始框,一个终止框外,就是若干执行框,没有判断框。. S1.

zia
Download Presentation

5.5 汇编语言程序设计的基本方法

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 5.5 汇编语言程序设计的基本方法 通常,编制一个汇编语言源程序应按如下步骤进行: ⑴ 明确任务,确定算法。 ⑵ 绘制流程图。 ⑶ 根据流程图编写汇编语言程序。 ⑷ 上机调试程序。 程序的基本结构有四种:顺序结构、分支结构、循环结构和子程序结构。

  2. 5.5.1 顺序程序设计 开始 顺序结构也称线性结构,其特点是其中的语句或结构被连续执行。 顺序程序是最简单的,也是最基本的一种程序结构。这种结构的程序从开始到结尾一直是顺序执行的,中途没有任何分支。从这种结构的流程图来看,除了有一个起始框,一个终止框外,就是若干执行框,没有判断框。 S1 S2 S3 结束

  3. [例1]求两个数的平均值。这两个数分别存放在X单元和Y单元中,而平均值放在Z单元中。源程序编制如下:[例1]求两个数的平均值。这两个数分别存放在X单元和Y单元中,而平均值放在Z单元中。源程序编制如下: DATA SEGMENT X DB 8CH Y DB 64H Z DB ? DATA ENDS STACK SEGMENT stack st DW 20H DUP(0) stackbottom dw $-st STACK ENDS

  4. CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE ASSUME DS:DATA ASSUME SS:STACK START: PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX MOV AX, STACK MOV SS, AX MOV SP, stackbottom

  5. MOV AL, X ADD AL, Y MOV AH, 0 ADC AH, AH SHR AX, 1 MOV Z, AL RET MAIN ENDP CODE ENDS END START Li508.asm

  6. 例5.9 在内存中自tab开始的16个单元连续存放着0至15的平方值(平方表),任给一个数x(0≤x≤15)在x单元中,如13,查表求x的平方值,并把结果放入y单元中。 DATA SEGMENT tab DB 0,1,4,9,16,25,36,49,64,81 DB 100,121,144,169,196,225 x DB 13 y DB ? DATA ENDS

  7. CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA BX,tab MOV AH,0 MOV AL,x ADD BX,AX MOV AL,[BX] MOV y,AL MOV AH,4CH INT 21H CODE ENDS END START LEA BX,tab MOV AL,x XLAT Li509.asm

  8. 5.5.2 分支程序设计 分支程序结构也称条件结构,通常是在两种或两个以上的不同的操作中选择其中的一个,如下图所示: 分支是通过条件转移指令来实现的。分支结构有一个共同点:运行方向总是向前的。 Y Y 条件 条件 条件 … N N S S1 S2 Sn S1 S2

  9. [例2] 现有一符号函数: 1 当X>0时 Y= 0 当X=0时 -1 当X<0时 假定X为-25,且存放在VARX单元中,函数值Y存放在VARY单元,试编写程序根据X的值确定函数Y的值。 根据题意画出流程图如下:

  10. 开始 AL←X 实现符号函数程序的流程图 AL≥0? Y N AL=0 Y Y←-1 N Y←1 Y←0 结束

  11. 编写程序如下: DSEG SEGMENT VARX DB -25 VARY DB ? DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX, DSEG MOV DS, AX MOV AL, VARX CMP AL, 0 JGE NEXT MOV AL, 0FFH ;MOV AL,-1 JMP EXIT

  12. MOV DL, VARY MOV CL, 4 ROR DL, CL AND DL, 0FH CMP DL, 0AH JB NUM ADD DL, 7 NUM: ADD DL, 30H MOV AH, 2 INT 21H MOV DL, VARY AND DL, OFH CMP DL, 0AH JB NUB ADD DL, 7 NUB: ADD DL, 30H MOV AH, 2 INT 21H MOV DL, ‘H’ MOV AH, 2 INT 21H NEXT: JE ZERO MOV AL, 1 JMP EXIT ZERO: MOV AL, 0 EXIT: MOV VARY, AL MOV AH, 4CH INT 21H CODE ENDS END START Li510.asm

  13. 例5.11设有首地址为arry的字数组,已按升序排好,数组长度为n(假设n=15),且数据段与附加段占同一段,在该数组中查找数number(假设等于83),若找到它,则从数组中删掉;若找不到,则把它插入正确位置,且变化后的数组长度在DX中。

  14. DATAJ SEGMENT DW ? n DW 15 number DW 83 arry DW 5,10,17,21,28,32,41,50,56,67,72 DW 88,95,125,150 DATAJ ENDS CODMA SEGMENT MAIN PROC FAR ASSUME CS:CODMA,DS:DATAJ,ES:DATAJ TART:PUSH DS SUB AX,AX PUSH AX PUSH ES MOV AX,DATAJ MOV DS,AX PUSH DS POP ES

  15. MOV AX,number ;待查找的数放入AX MOV DX,n ;初始化DX MOV CX,n ;设置计数器CX MOV DI,OFFSET arry ;arry的有效地址放入DI CLD ;建立方向标志 REPNE SCASW ;用重复串扫描指令进行查找 JE DELETE DEC DX MOV SI,DX ADD SI,DX TT3: CMP AX,arry[SI] JL TT1 MOV arry[SI+2],AX ;功能是:若没有查到, JMP TT2 ;则将此数插入正确位置 TT1: MOV BX,arry[SI] MOV arry[SI+2],BX SUB SI,2 JMP TT3 TT2: ADD DX,2 ;修改数组长度 JMP FAN DELETE: JCXZ NEXT LOOPT: MOV BX,[DI] ;此程序段功能是:若查找到, MOV [DI-2],BX ;则从数组中删除该数 ADD DI,2 LOOP LOOPT NEXT: DEC DX ;修改数组长度 FAN: POP ES RET MAIN ENDP CODMA ENDS END START Li511.asm

More Related