汇编入门之输入、输出、奇偶判断、多字节变量定义

原创文章,转载请注明:汇编入门之输入、输入、奇偶判断、多字节变量定义  By Lucio.Yang

1.入门参考

  首先介绍一个非常好的汇编知识的索引网站:经典汇编语言教程

  1.1 MOV CX,[BX]
    加方框的意思是说以BX中的数据为地址寻址,将寻址得到的数据放在CX中
  1.2 16位寄存器组
    4个数据寄存器(AX、BX、CX和DX)
    2个变址和指针寄存器(SI和DI) 2个指针寄存器(SP和BP)
    4个段寄存器(ES、CS、SS和DS)
    1个指令指针寄存器(IP)
    1个标志寄存器(Flags)
  1.3 DB
    定义字节变量的定义符为DB/BYTE(DefineByte),每个字节只占一个字节单元。
  1.4 INT 21H 指令说明
    参考:INT 21H 指令说明及使用方法

  1.5 无符号条件转移指令 

JE/JZ

ZF=1 Jump Equal or Jump Zero

JNE/JNZ

ZF=0 Jump Not Equal or Jump Not Zero

JA/JNBE

CF=0 and ZF=0 Jump Above or Jump Not Below or Equal

JAE/JNB

CF=0 Jump Above or Equal or Jump Not Below

JB/JNAE

CF=1 Jump Below or Jump Not Above or Equal

JBE/JNA

CF=1 or AF=1 Jump Below or Equal or Jump Not Above

 

2.程序内容描述

  已知两个整数变量 A 和B,试编写完成下述操作的程序:
  (1)、若两个数中有一个是奇数,则将奇数存入A 中,偶数存入B 中。
  (2)、若两个数均为奇数,则两数分别加1,并存回原变量。
  (3)、若两个数均为偶数,则两变量不变。

3.程序流程描述

  

4.源代码

DATAS SEGMENT
Tip db 'Program run successfully',0ah,0dh,'$'
Odd db ' is Odd',0ah,0dh,'$'
Eve db ' is Even',0ah,0dh,'$'
EntX db ' is x ',0ah,0dh,'$'
Enty db ' is y ',0ah,0dh,'$'
X db 6 dup(?);定义一个5个byte型的空间,内容用()内的数值填充,是?,不用初始化
Y db 6 dup(?)
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    xor si,si;异或,将变址和指针寄存器清零
    xor di,di;第二个指针寄存器
    mov cx,5;将5移到cx中,cx控制循环次数
INPUTX:
    mov ah,01h;键盘输入一个字符
    int 21h;键盘输入并且回显,,将ASCII送入AL中
    cmp al,'0'
    jb INPUTY;jump if below
    cmp al,'9'
    ja INPUTY;jump if above
    mov X[si],al;将输入字符移到n[0]
    inc si;加1指令
    jmp INPUTX
INPUTY:
    mov ah,01h;键盘输入一个字符
    int 21h;键盘输入并且回显,将ASCII送入AL中
    cmp al,'0'
    jb JUDGEX;jump if below
    cmp al,'9'
    ja JUDGEX;jump if above
    mov Y[di],al;将输入字符移到n[0]
    inc di;加1指令
    jmp INPUTY
JUDGEX:
    mov X[si],'$'
    dec si;减1指令
    xor ah,ah;ah清空
    mov al,X[si];si指向低位
    mov bl,2
    div bl;除法指令(ax/2),被除数默认存放在AX
    cmp ah,0;无符号比较,ZF=1表示两个数相等
    jnz XO;ZF=0,即余数不等于0等于1,为奇数
     jz XE
XO:
    ;输出X
    mov dx,offset X
    call OUTPUT
    ;输出奇数字符串
    mov dx,offset Odd;输出奇数字符串
    call OUTPUT  
    ;判断Y奇偶
    mov Y[di],'$'
    dec di;减1指令
    xor ah,ah;ah清空
    mov al,Y[di];si指向低位
    mov bl,2
    div bl;除法指令(ax/2),被除数默认存放在AX
    cmp ah,0;无符号比较,ZF=1表示两个数相等
    jnz OO;ZF=1,即余数不等于0等于1,为奇数
    jz OE
XE:
    ;输出X
    mov dx,offset X;取1的偏移地址给dx
    call OUTPUT
    ;输出偶数字符串
    mov dx,offset Eve
    mov ah,09h
    int 21h
    ;判断Y奇偶
    mov Y[di],'$'
    dec di;减1指令
    xor ah,ah;ah清空
    mov al,Y[di];di指向低位
    mov bl,2
    div bl;除法指令(ax/2),被除数默认存放在AX
    cmp ah,0;无符号比较,ZF=1表示两个数相等
    jnz EO;ZF=1,即余数不等于0等于1,为奇数
    jz EE
OO:
    ;输出Y
    mov dx,offset Y
    call OUTPUT
    ;输出奇数字符串
    mov dx,offset Odd;输出奇数字符串
    call OUTPUT
    
    inc X[si]
    inc Y[di]
    jmp EXIT
OE:
    ;输出Y
    mov dx,offset Y;取1的偏移地址给dx
    call OUTPUT
    ;输出偶数字符串
    mov dx,offset Eve
    call OUTPUT
    jmp EXIT
EE:
    ;输出Y
    mov dx,offset Y;取1的偏移地址给dx
    call OUTPUT
    ;输出偶数字符串
    mov dx,offset Eve
    call OUTPUT
    jmp EXIT
EO:
    ;输出Y
    mov dx,offset Y
    call OUTPUT
    ;输出奇数字符串
    mov dx,offset Odd;输出奇数字符串
    call OUTPUT
    
       mov al,X[0]
       mov ah,Y[0]
       xchg ah,X[0]
       xchg al,Y[0]
       
       mov al,X[1]
       mov ah,Y[1]
       xchg ah,X[1]
       xchg al,Y[1]
       
       mov al,X[2]
       mov ah,Y[2]
       xchg ah,X[2]
       xchg al,Y[2]
       
       mov al,X[3]
       mov ah,Y[3]
       xchg ah,X[3]
       xchg al,Y[3]
       
       mov al,X[4]
       mov ah,Y[4]
       xchg ah,X[4]
       xchg al,Y[4]
       
       mov al,X[5]
       mov ah,Y[5]
       xchg ah,X[5]
       xchg al,Y[5]
    
    jmp EXIT
EXIT:    
    xor si,si
    xor di,di
    ;输出最后结果
    mov dx,offset X
    call OUTPUT
    mov dx,offset Entx
    call OUTPUT
    mov dx,offset Y
    call OUTPUT
    mov dx,offset Enty
    call OUTPUT
    
    dec cx
    jmp INPUTX;loop INPUTX
    
    mov ah,00h;暂停
    int 16h
    MOV AH,4CH;结束,返回DOS
    INT 21H
OUTPUT proc
    mov ah,09h
    int 21h
    ret
OUTPUT endp
CODES ENDS
    END START
View Code

 

posted @ 2015-04-09 23:16  Lucio.Yang  阅读(2067)  评论(2编辑  收藏  举报