汇编语言学习笔记(续)

15-18节课

 

tip:cpu与外设直接传送字符的ASCII

这里很多笔记采取图片形式,因为ppt上有,而且都和前面比较类似,认真看了前面的现在的都能理解了,就不再手敲一边添加帮助理解的文字了。

标志寄存器传送指令

标志送AH指令:    LAHF

     执行操作:              (AH) <- (FLAGS的低字节)

    

     AH送标志寄存器指令:   SAHF

     执行操作:                         (FLAGS的低字节) <-  (AH)

    

     标志进栈指令:    PUSHF

     执行操作:            (SP)  <-  (SP) - 2

                         ( (SP)+1,  (SP) )  <-  (FLAGS)

            

     标志出栈指令:    POPF

     执行操作:            (FLAGS)  <-  ( (SP)+1,  (SP) )

                         (SP)  <-  (SP) + 2

影响标志位

例:

mov AX, 37C8H

SAHF; AH ->Flags的低8位

问 CF,PF的值为?

解:根据标志位寄存器

 可知,CF=1,DF=1

例:

MOV AX, 1234H

ADD AX,5678H

push AX

popF

问CF,OF的值为多少?

 解:同上,考虑栈的存储是高地址向低地址延伸

CF = 0,OF = 1

类型转换指令

    CBW          AL -> AX

    执行操作: 若(AL)的最高有效位为0,则(AH)= 00H

                         (AL)的最高有效位为1,则(AH)= FFH

    CWD         AX -> (DX,AX)

    执行操作:若(AX)的最高有效位为0,则(DX)= 0000H

                        (AX)的最高有效位为1,则(DX)= FFFFH

    

     例:(AX) = 0BA45H

             CBW              ; (AX)=0045H

             CWD              ; (DX)=0FFFFH  (AX)=0BA45H

               *  无操作数指令

               *  隐含对AL AX 进行符号扩展

               *  不影响条件标志位

 1.字节扩展指令

格式:CBW

功能:将AL的符号位扩展到AH

例:

MOV AL,9AH

CBW;AX=FF9AH

2.字扩展

格式:CWD

功能:将AX的符号位扩展到DX

例:

MOV AX,8ACDH

CWD;DX = FFFFH

算术指令

·   加法指令

      ADDADCINC

·   减法指令

      SUBSBBDECNEGCMP

·   乘法指令

      MULIMUL 

·   除法指令

      DIVIDIV

·   十进制调整指令

      DAADAS

      AAAAASAAMAAD

加法指令

     加法指令:    ADD  DST, SRC 

     执行操作:    (DST)  <-  (SRC) + (DST)

     带进位加法指令:  ADC  DST, SRC 

     执行操作:    (DST)  <- (SRC) + (DST) + CF

     1指令:        INC  OPR 

     执行操作:      (OPR)  <-  (OPR) + 1

INC指令不影响CF标志外,均对条件标志位有影响。

 

1.ADD

 格式:ADD DST, SRC

功能:DST<-DST+SRC

2.ADC

格式:ADC DST,SRC

功能:DST<-DST+SRC+CF

带进位的加法

3.加1指令

格式:INC OPRD(OPRD不能为立即数)

功能:OPRD<-OPRD+1

减法指令

1.求补指令

格式:NEG OPRD

功能:OPRD<-   -(OPRD);OPRD不能为立即数 

2.比较指令

格式:CMP OPR1,OPR2

功能:OPR1 - OPR2 只影响Flags

 

 

 乘法指令

 

1.无符号数乘法

1.字节乘法格式

mul SRC

功能:AL*SRC ->AX

SRC为字节操作数

2.字乘法格式(SRC字类型)

mul SRC

功能:AX*SRC ->(DX,AX)

计算 27*15=?

mov AL,27

mov BL,15

mul BL

AL*BL ->AX 

2.有符号乘法

1.字节乘法

imul SRC    ;AL*SRC ->AX 

2.字乘法

imul SRC ;AX*SRC -> (DX,AX)

mov AL,-2

AL = FEH

有符号数:-2

无符号数:254

-17D在8位机上的补码为EFH

在16位机上表示无符号数的十进制数为65519

十六进制为FFEEH 

 除法指令

除法中余数的符号与被除数一致

 

mov AX,-5

mov BL,2

IDIV BL

AX:FFFEH

AX/BL(商送AL,余数送AH)

mov AX,-5

mov BL,2

DIV BL

AX = 017DH 

例题:

1.写出计算(25*18-76)/ (-19)的指令序列

mov AL,25

mov DL,18

imul DL

SUB AX,76;AX<-AX-76

MOV BL,-19

IDIV BL

2.(2518*1988-2569)/1182

mov AX,2518

mov BX,1988

imul BX;(DX,AX)<-2518*1988

SUB AX,2569

SBB DX,0;结果在(DX,AX)中

mov BX,1182

IDIV BX

3.用8086汇编指令实现:

(2258+1983)*2205-1768*271

解:

mov AX,2258

ADD AX,1983

mov BX,2205

imul BX;(DX,AX)

mov BX,DX

mov CX,AX

mov AX,1768

mov BX,271

imul BX;(DX,AX)<-1786*271

SUB CX,AX

SBB BX,DX;结果在(BX,CX)

19-20节课

十进制和二进制的除法上机操作

十进制:12345678  /  2811

mov ax,1234

mov bx,10000

mul bx  ;(dx,ax)=12340000

add ax,5678

adc dx,0   ;(dx,ax)=12345678

mov bx,2811

div bx

二进制: 12345678  /  2811

mov ax,5678H

mov dx,1234H

mov bx,2811H

div bx

十进制调整指令

BCD码:用二进制编码的十进制数,又称--十进制数

压缩的BCD码:用 4 位二进制数表示 1 位十进制数

 例:( 59 )10 ( 0101 1001 )BCD

非压缩的BCD码:用 8 位二进制数表示 1 位十进制数

            例:( 59 )10 ( 0000 0101   0000 1001 )BCD

例:写出( 3590 )10的压缩 BCD 码和非压缩BCD码,并分

        别 把它们存入数据区 PAKED UNPAK

压缩BCD:  ( 3590 )10( 0011 0101 1001 0000 )BCD

非压缩BCD

   ( 3590 )10( 00000011 00000101 00001001 00000000 )BCD

非压缩 

1.AAA:非压缩BCD码加法调整指令

格式:AAA

功能:对两个非压缩BCD码相加存于AL中的和进行十进制调整

调整规则:若AL的低4位大于9或AF=1,则AL+6,AH+1,CF与AF置1,AL的高4位清零;否则,CF和AF清零。(因非压缩BCD码,故适用于被加数与加数为1位数的加法)

例1:  7+9=?

MOV  AL,7

ADD  AL,9  ;AX=0010H  AF=1

AAA          ;AX=0106H  CF=1   AF=1

2.非压缩BCD码减法调整指令AAS

格式:AAS

功能:对两个非压缩BCD码相减存于AL中的差进行十进制调整

调整规则:若AF=1,则AL-6 ,AH-1 ,CF=1 ,截取AL低4位;否则,只截取AL低4位。

例1:

MOV  AL,2

SUB   AL,5   ;AX=00FDH AF=1CF=1

AAS            ;AX=FF07H ,AF=1,CF=1

3.非压缩BCD乘法调整指令AAM

格式:AAM

功能:对两个非压缩BCD码数相乘存于AX中的积进行(十进制)非压缩BCD码的调整。

调整规则:AX÷10的商存放在AH中,AX÷10的余数存放在AL中。

注:该指令影响PF、SF、ZF。

例:MOV  AL,7

MOV  BL,8

MUL  BL    ;AX=0038H

AAM        ;AX=0506H

 4.非压缩BCD码除法调整指令AAD

格式:AAD

功能:对存于AX中的非压缩BCD码被除数(两位十进制数)进行十进制调整。

调整规则:AH×10+AL →AX

(特别说明:BCD码除法是先对被除和进行调整,然后再去做除法。)

例:78 ÷9=?

MOV  AX,0708H

AAD                ;调整后,AX=004EH

MOV  BL,9        ;执行78 ÷9

DIV   BL           ;AX=0608H  (商:8 AL ,余数:6AH中)

压缩 

1.压缩BCD码加法调整指令

格式:DAA

功能:对两个压缩BCD码数(两位数的十进制数,带尾符H)相加存于AL中的和进行十进制调整。(影响:CF、PF、AF、ZF、SF)

调整规则:若AL中的低4位>9,或AF=1,则AL+06H ,AF=1

          若AL中的高4位>9,或CF=1,则AL+60H,CF=1

例:计算十进制数:38+97=?

MOV  AL,38H

ADD  AL,97H ;AX=00CFH  AF=0,低4位为F,大于9 4位为C,也大于9

DAA           ;AX=0035H   AF=1CF=1

 2.压缩BCD码减法调整指令

格式:DAS

功能:对两个压缩BCD码数(两位数的十进制数,带尾符H)相减存于AL中的差进行十进制调整。(影响:CF、PF、AF、ZF、SF)

调整规则:若AL中的低4位>9,或AF=1,则AL-06H ,AF=1

          若AL中的高4位>9,或CF=1,则AL-60H,CF=1

例:计算十进制数:38-97=?

MOV  AL,38H

SUB  AL, 97H ;AX=00A1H  AF=0 AL的高4位为A,大于9CF=1

DAS            ;AX=0041H   AF=0CF=1 

循环指令 

格式:LOOP  标号

功能: 循环次数先送CX,然后执行指令LOOP 标号 时,先CX-1送CX,若CX不等于0 转标号处执行,否则执行循环指令的后续语句。

例:计算s=1+2+...+100

mov cx,100

mov s,0

mov ax,1

AA1:add s,ax

inc ax

loop aa1

 例:计算s=1*2+2*3+3*4+...

mov cx,10

mov s,0

mov ax,1

mov bx,2

aa1:mul bx

add s,ax

mov ax,bx

inc bx

loop aa1

21-22节课 

DOS中断调用

一.常用的DOS中断    INT  21H

1.DOS中断的执行步骤(分3步)

第一步:置入口参数

第二步:功能号送AH

第三步:执行 INT  21H

(1)1号功能

格式:MOV  AH, 1

      INT  21H

功能:接收键盘输入一个ASCII字符值保存在寄存器AL中

(2)2号功能

格式:MOV  DL, 字符的ASCII值

      MOV  AH,  2

      INT 21H

功能:屏幕上输出DL中的ASCII字符

      上机例:

MOV  DL, 42H   ; MOV  DL, ‘B’

MOV  AH,  2

INT  21H

执行上述3条指令屏幕显示大写字母‘B’

(3)5 号功能

格式:MOV  DL, 字符的ASCII值

      MOV  AH,  2

      INT 21H

功能:在打印机上输出DL中的ASCII字符

      上机例:

MOV  DL, 42H   ; 等价指令  MOV  DL, ‘B’

MOV  AH,  5

INT  21H

执行上述3条指令在打印机输出大写字母‘B’

(4)9号功能

格式:  LEA  DX,  字符串变量名

        MOV  AH,  9

        INT  21H

功能:在屏幕上显示一串字符。字符串以$ 作为结束符

(5)10号功能( 0AH 号功能)

格式: 格式:  LEA  DX,  字符串变量名

        MOV  AH,  10

        INT  21H

功能:接收键盘输入一串字符存入到指定的“ 字符串变量名

”缓冲区中。

注:变量定义格式如下

变量名   DB  输入的最大数, 实际数, 数字 DUP(‘$’)

例:  A   DB  20, 0, 20 dup(‘$’)

解释:定义了一个变量缓冲区A, 最多能输入20个字符,刚开始输入数为0,20个字节空间初始值用’$’填充。

6)4CH号功能,即返回DOS

格式: MOV  AH, 4CH

       INT  21H

功能:系统运行结束,返回DOS

补充命令 

格式:SHR AL,CL

功能:AL逻辑右移CL位数

SHR AL,1;AL右移1位

MOV CL,3

SHR AL,CL;AL右移3位

dos命令分析 

数据段:

DATA segment 

A DB 20,0,20 dup('$')

DATA ends

代码段:

code segment

assume cs:code,ds:DATA

start:mov AX,DATA

mov DS,AX

输入:

lea ax,a

mov ah,10

int 21h

显示回车:

mov dl,0dh

mov ah,2

int 21h

显示换行:

mov dl,0ah

mov ah,2

int 21h

输出刚输入的内容:

lea dx,a+2

mov ah,9

int 21h

结束:

mov ah,4ch

int 21h

code ends

end start

 内存中的储存结构:解释了为什么是从a+2开始以及为什么只能输入最大值-2个数(包括了回车和字符串终止符'$'

 

二、DOS功能调用实验

 实验题:键盘输入一串字符“I am a student.”,按回车键,屏幕显示回车换行后,重新显示该字符串。

C:\>EDIT  STRIN.ASM
DATA SEGMENT
A DB 20,0,20 DUP('$')
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
      MOV DS,AX
      LEA DX, A
      MOV AH,10
      INT 21H
      MOV DL,0DH
      MOV AH,2
      INT 21H
      MOV DL,0AH
      MOV AH,2
      INT 21H
      LEA DX,A+2
      MOV AH,9
      INT 21H
      MOV AH,4CH
      INT 21H
      CODE ENDS
      END START

经存盘,汇编、连接生成STRIN.EXE可执行文件,运行结果如下:

拆字输出数字方法

例:将寄存器AL中的压缩BCD码如何输出?

AL=39H     如何显示数字:3和9。

MOV  AL,  39H
MOV  CL, 4
SHR   AL, CL   ;将AL中的39H变成03H
MOV  DL,  AL
OR  DL, 30H
MOV  AH, 2
INT  21H     ;显示 ‘3’
AND  AL, 0FH  ;AL的高4位清零
MOV  DL,  AL
OR  DL, 30H
MOV  AH, 2
INT  21H     ; 显示 ‘9’

 从键盘接收十进制数存入BX程序

思想:键盘与CPU是通过ASCII字符传送,即要把输入的数字字符转换成数字,下面程序段的算法思想是:( 例输入数字字符:374  输其它非数字字符退出(((0×10)+3) ×10+7) ×10)+4  ,即将字符’3’,’7’,’4’ 转成数值:374

    MOV  BX, 0                   
 NEW:MOV  AH, 1                   
      INT    21H                    
      SUB  AL,30H
      JL   EXIT
      CMP  AL, 9H
      JG  EXIT
CBW
XCHG  AX, BX
MOV  CX, 10
MUL  CX
XCHG  AX, BX

ADD   BX, AX
 JMP  NEW
 EXIT: ………

利用8086宏汇编编程显示任意十进制数(<=32767,无符号数<=65535)的宏定义和调用程序清单:

多位数的算术运算实验 

一、实验目的:通过本实验,让学生掌握非压缩BCD码与压缩BCD码算术运算(+ - × ÷)十进制调整指令的功能(指令:AAA、DAA、AAS、DAS、AAM、AAD),掌握算术运算(+ - × ÷)指令的功能。

二、实验内容

1、分别利用非压缩BCD码与压缩BCD码加、减法计算:

259778+68653=?  259778-68653=?

; 259778+68653=? 

非压缩BCD加法

data segment
a db 8,7,7,9,5,2
b db 3,5,6,8,6,0
c db 6 dup(0)
data ends
code segment
assume cs:code,ds:data
start:mov ax,data
      mov ds,ax
      mov cx,6
      mov si,0
      clc
  aa1:mov al,a[si]
      adc al,b[si]
      aaa
      mov c[si],al
      inc si
      loop aa1
      mov si,5
      mov cx,6
  aa2:mov dl,c[si]
      or dl,30h
      mov ah,2
      int 21h
      dec si
      loop aa2
      mov ah,4ch
      int 21h
      code ends
           end start

非压缩BCD码减法 259778-68653=? 程序清单?将上述程序中程序行

adc  al, b[si]

aaa

改为如下:

sbb  al, b[si]

aas

259778+68653=?  压缩BCD加法 

data segment
a db 78h,97h,25h
b db 53h,86h,06h
c db 3 dup(0)
data ends
code segment
     assume cs:code,ds:data
     start:mov ax,data
           mov ds,ax
           mov cx,3
           clc
           mov si,0
     aa1:mov al,a[si]
         adc al,b[si]
         daa 
         mov c[si],al
         inc si
         loop aa1
         mov cx,3
         mov si,2
     aa2:mov dl,c[si]
         push cx
         mov cl,4
         shr dl,cl
         or dl,30h
         mov ah,2
         int 21h
         pop cx
         mov dl,c[si]
         and dl,0fh
         or dl,30h
         mov ah,2
         int 21h
         dec si
         loop aa2
         mov ah,4ch
         int 21h
         code ends
              end start

注:压缩BCD码减法 259778-68653=? 程序清单?

将上述程序中程序行

adc  al, b[si]

daa

改为如下:

sbb  al, b[si]

das

2、利用DEBUG命令单步步执行命令T,通过查看寄存器内容,检验BCD码运算调整指令的功能。

(1)MOV AL,12H

     SUB  AL, 5 ;AX=

     AAS          ;AX=

(2)MOV AL,12H

     SUB  AL,5   ;AX=

     DAS           ;AX=

(3)MOV AL,2

     SUB  AL,5  ;AX=

     AAS          ;AX=

(4)MOV  AL,2

     SUB  AL,5  ;AX=

     DAS          ;AX=

(5)MOV AL,5

     ADD  AL,7  ;AX=

     AAA          ;AX=

(6)MOV  AL,5

     ADD   AL,7  ;AX=

     DAA           ;AX=

(7)MOV  AL,37H

     ADD  AL,98H ;AX=

     DAA            ;AX=

(8)MOV AL,37H

     ADD AL,98H ;AX=

     AAA          ;AX=

(9)MOV  AL,-3

     MOV  BL,2

     IMUL  BL  ;AX=

(10)MOV  AL,-3

      MOV  BL,2

      MUL  BL   ;AX=

(11)MOV  AX,-5

      MOV  BL,2

      IDIV  BL    ;AX=

(12)MOV  AX,5

      MOV  BL,-2

      IDIV  BL    ;AX=

(13)MOV  AX,-5

      MOV  BL,-2

      IDIV  BL   ;AX=

(14)MOV  AX,5

第23-24节课

逻辑运算指令

这里比较简单就放个图给大家理解

 

 移位指令

逻辑左移

格式:SHL OPR,CNT

功能:最高位送CF,其余位向左移动,最低位依次补0

逻辑右移

格式:SHR OPR,CNT

功能:最低位送CF,其余位向右移动,最高位依次补0

  

算术左移

格式:SAL OPR,CNT

功能:同逻辑左移 

算术右移

格式:SAR OPR,CNT

功能:最低位送符号位 ,最高位依次补最初符号位数值

循环左移

格式: ROL OPR,CNT

功能:最高位送CF和最低位,其余位左移

循环右移

格式:ROR OPR,CNT

功能:最低位送CF和最高位,其余位右移

  

带进位循环左移

格式:RCL OPR,CNT

功能:最高位送CF,CF的值送最低位,其余位左移

  

带进位循环右移

格式:RCR OPR,CNT

功能:最低位送CF,CF送最高位,其余位右移

  

 

 

关于移位指令的移位位数CNT的有关说明:CNT:清进位,CF=0;STC:进位置位,CF=1;CMC:进位取反

关于状态标志位FLags

1.状态标志(6个)

C、P、A、Z、S、O

2.控制标志(3个)

TF、IF、DF(方向)

CLD;DF=0

STD;DF=1

DF=0,地址为增方向,显示UP

DF=1,地址为减方向,显示DN 

实验:12345+6789=?

DATA segment
A DB 8,1,1,8,2,7,9,0
B DB 9,6,5,1,1,8,8,0
C DB 8 DUP(0)
DATA ends
code segment
assume cs:code,DS:data
start: mov AX,DATA
       mov DS,AX
       mov Si,0
       mov cx,8
       clc
   aa1:mov al,a[si]
       adc al,b[si]
       aaa
       mov c[si],ac
       inc si
       loop aa1
       mov cx,8
       mov si,0
   aa2:mov dl,c[si]
        or dl,30H
       mov ah,2
       int 21h
       dec si
       loop aa2
       mov ah,4ch
       int 21h
       code ends
       end start

AC=39H,显示39H

//显示3
push AX
mov CL,4
SHR AL,CL
mov DL,AL
or DL,30H
mov AH,2
int 21H
//显示9
pop AX
AND AL,0FH
mov DL,AL
or DL,30H
mov AH,2
int 21H
mov AH,4CH
int 21H

第25-26节课

串操作指令

  

串操作实验案例

一、【实验目的】本实验掌握字符串扫描指令SCAS的功能,充分理解串操作中涉及的DS、ES、SI,DI的使用方法;理解串操作前缀REP、REPE/REPZ、REPNE/REPNZ的使用方法;通过本实验起到举一反三,以达到抛砖引玉的作用,让大家掌握其它串操作指令的使用。

1.串传送指令MOVS(MOVSB,MOVSW)

2.串存入指令STOS(STOSB,STOSW)

3.从串取指令LODS(LODSB,LODSW)

4.串比较指令CMPS(CMPSB, CMPSW)

二、【实验内容】已知在内存缓冲区变量A处有一串字符串‘computer’,现通过键盘输入一个字符,通过对缓冲区变量A的字符串‘computer’,查找是否有输入的字符,如存在,屏幕显示’Y’,并显示输入的这个字符在‘computer’的序号;否则显示‘N’。

   例:输入: r                        输入:w

       显示: Y                        显示:N     

              8

  解释:因为字符‘r‘ 在‘computer’字符串中存在,并且位置为第8个,所以显示‘Y’, 8;而‘w’在‘computer’字符串中不存在,所以显示’N’。

outln  macro     ;定义宏指令outln, 用于显示回车和换行
mov dl,0dh       ;显示回车
mov ah,2
int 21h
mov dl,0ah       ;显示换行
mov ah,2
int 21h
endm             ;宏定义结束
data segment 
a db 'computer'  ;内存变量a缓冲区字符串的定义
data ends
code segment
assume cs:code,es:data
start:mov ax,data
      mov es,ax    ;SCAS操作是对目标段查找,所以段地址送ES
      mov ah,1     ;键盘输入一个ASCII字符到AL中
      int 21h
      push ax      ;输入在AL中的字符入栈保护
      outln        ;调用宏指令显示回车换行
      pop ax
      mov cx,8     ;以下3条指令为执行串操作SCASB的准备
      lea di,a
      cld
      repnz  scasb  ;在CX不为0且没找到的情况下重复执行串查找指令scasb
      jnz  nofind   ;没找到,转标号nofind
      mov dl,'Y'   ;找到显示’Y’
      mov ah,2
      int 21h
      outln        ;显示回车换行
      mov dx,8
      sub dx,cx    ;利用CX定位字符与字符串的匹配位置值
      or dl,30h    ;显示位置值
      mov ah,2
      int 21h
      jmp over     ;转程序结束处
nofind: mov dl,'N'  ;没匹配显示’N’
        mov ah,2
        int 21h
 over: mov ah,4ch   ;程序结束
        INT 21H
      code ends
      end start

程序运行结果如下:

第27-28节课

转移指令

一、转移指令格式

JXXX   目标

功能:有条件或无条件转到目标处执行。

1.无条件转移指令格式

JMP   目标

功能:无条件转到目标处执行

SHORT(可省略)  ,  NEAR  PTR  , FAR  PTR (段间)

2.有条件转移指令

几个重要的英语单词

Above  高于;Below  低于; Not  不; Equal  等于

Zero   为零;  Great  大于  ;  Less  小于

S:负SF=1;   C:有进位  CF=1;

Equal= Zero

JE完全等价于JZ

3.无符号数比较

说明:-1表示字节无符数:255

      -1表示无符数:65535

     -n 示字节无符数:256-n;表示字无符数:65536-n

高级语言      汇编语言

>              JA             (不小于低于,等价:JNBE)

>=      JAE/JAZ (不低于,等价:JNB)

<       JB   等价于:JNAE

<=      JBE      JNA

==             JE/JZ

<>(不等于)   JNZ/JNE

例:

MOV  AL, -2

CMP  AL, 45

JA  AA1

......

请问程序会转到AA1吗?  

4. 有符号数比较

高级语言      汇编语言

>       JG  或  JNLE

>=      JGE  或 JNL

<        JL 或 JNGE

<=      JLE 或 JNG

==           JE/JZ

<>     JNZ/JNE

MOV  AL, -2

CMP  AL, 45

JG  AA1

......

请问程序会转到AA1吗?  不会

 

 

 

 

选择题:转移指令助记符JNA 等价的是( B  

A、JNG     B、JBE    C、JNL     D、JMP

要求:编程完成S=1+2+3+…+100

程序:

    MOV  AX,0

    MOV  BX,1

    MOV CX,100

AA1:ADD AX, BX

(INC BX          )  戓填:ADD BX, 1

LOOP AA1

要求:编程完成S=2+4+6…+100 (100以内的偶数和)

MOV  AX,0

    MOV  BX,2

    MOV CX,50

AA1:ADD AX, BX

(INC BX

INC BX          )  戓填:ADD BX, 2

LOOP AA1

要求:S=1X2+2X3+3X4+…+10X11

MOV S, 0

MOV CX,10

MOV DL,1

MOV DH,2

AA1:MOV AL,DL

MOV BL,DH

MUL BL  ;1x2送到AX中

ADD S, AX

INC DL

INC DH

LOOP AA1

要求:计算S=1!+2!+…+5!

程序:

MOV S, 0

MOV CX, 5

MOV AX,1

MOV BX,1

AA1:MUL BX

ADD  S, AX

INC  BX

LOOP  AA1

课外作业:计算S=1^2+ 2^2+3^2+…+10^2

(结果:385),写出汇编代码

程序:

mov s,0

mov cx,10

mov ax,1

mov bx,1

aa1:mul bx

       add s,ax

       inc bx

       mov ax,bx

       loop aa1

 

 

循环指令

和转移指令类似

 

 call指令

 

 RET指令

 

 

 

 

  • 16
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值