原创文章,转载请注明:汇编入门之输入、输入、奇偶判断、多字节变量定义  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 ENDSSTACKS SEGMENT;此处输入堆栈段代码
STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKS
START:MOV AX,DATASMOV DS,AXxor 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 belowcmp al,'9'ja INPUTY;jump if abovemov 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 belowcmp al,'9'ja JUDGEX;jump if abovemov 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,2div bl;除法指令(ax/2),被除数默认存放在AXcmp ah,0;无符号比较,ZF=1表示两个数相等jnz XO;ZF=0,即余数不等于0等于1,为奇数jz XE
XO:;输出Xmov dx,offset Xcall 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,2div bl;除法指令(ax/2),被除数默认存放在AXcmp ah,0;无符号比较,ZF=1表示两个数相等jnz OO;ZF=1,即余数不等于0等于1,为奇数jz OE
XE:;输出Xmov dx,offset X;取1的偏移地址给dxcall OUTPUT;输出偶数字符串mov dx,offset Evemov ah,09hint 21h;判断Y奇偶mov Y[di],'$'dec di;减1指令xor ah,ah;ah清空mov al,Y[di];di指向低位mov bl,2div bl;除法指令(ax/2),被除数默认存放在AXcmp ah,0;无符号比较,ZF=1表示两个数相等jnz EO;ZF=1,即余数不等于0等于1,为奇数jz EE
OO:;输出Ymov dx,offset Ycall OUTPUT;输出奇数字符串mov dx,offset Odd;输出奇数字符串call OUTPUTinc X[si]inc Y[di]jmp EXIT
OE:;输出Ymov dx,offset Y;取1的偏移地址给dxcall OUTPUT;输出偶数字符串mov dx,offset Evecall OUTPUTjmp EXIT
EE:;输出Ymov dx,offset Y;取1的偏移地址给dxcall OUTPUT;输出偶数字符串mov dx,offset Evecall OUTPUTjmp EXIT
EO:;输出Ymov dx,offset Ycall OUTPUT;输出奇数字符串mov dx,offset Odd;输出奇数字符串call OUTPUTmov 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,sixor di,di;输出最后结果mov dx,offset Xcall OUTPUTmov dx,offset Entxcall OUTPUTmov dx,offset Ycall OUTPUTmov dx,offset Entycall OUTPUTdec cxjmp INPUTX;loop INPUTXmov ah,00h;暂停int 16hMOV AH,4CH;结束,返回DOSINT 21H
OUTPUT procmov ah,09hint 21hret
OUTPUT endp
CODES ENDSEND START

View Code

转载于:https://www.cnblogs.com/lucio_yz/p/4412942.html

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

  1. linux gcc 内联汇编入门

    目录 2. 概览(Overview of the whole thing.) 3.GCC汇编语法(GCC Assembler Syntax.) 3.1. 源-目标顺序(Source-Destinati ...

  2. 汇编 编程实现从键盘输入三位以内的十进制负数_macOS上的汇编入门(二)——数学基础...

    在正式介绍汇编语言之前,我会先用几篇文章讲一些数学基础和硬件基础.如果读者已经具备了一定的知识基础,可以直接跳过这些文章去汇编语言部分. 二进制,八进制与十六进制 在计算机底层的软件层面,我们通常采用 ...

  3. 汇编实现字符串输入并倒序输出

    汇编中的倒序输出 1.INT 21H的1号功能进行字符输入. 存放在数据段,倒序输出. DATAS SEGMENTMAXL DB 30 ;定义字符串大小做计数RLEN DB ? ;保存实际长度STR1 ...

  4. [转载] Python入门(输入/输出、数据类型、条件/循环语句)

    参考链接: Python中的循环技术 在介绍之前我们先来看看计算机的三个根本性基础: 1.计算机是执行输入.运算.输出的机器 2.程序是指令和数据的集合 3.计算机的处理方式有时与人们的思维习惯不同 ...

  5. c语言 输入1-7之间的一个整数,然后根据输入的数字判断是星期几,最后输出对应的星期的全称。如输入3,则输出Wednesday。

    4.输入1-7之间的一个整数,然后根据输入的数字判断是星期几,最后输出对应的星期的全称.如输入3,则输出Wednesday. C语言## ## c输入1-7之间的一个整数,然后根据输入的数字判断是星期 ...

  6. c语言求同时被3和7,c语言输入一个数 判断该数能否同时被3和7整除 如果能整除 则输出yes...

    输入1个整数,判断该数是奇数还是偶数.(用C语言编程) #includevoidmain(){intn;printf("输入一个整数:");scanf("%d" ...

  7. 用户在控制台输入0-6,判断是星期几。例如:输入0,输出星期一;输入1,输出星期二,其余依次类推。

    用户在控制台输入0-6,判断是星期几.例如:输入0,输出星期一:输入1,输出星期二,其余依次类推. 第一种 package com.stx.p1.gonghaoyue; import java.uti ...

  8. 用java将输入的整数逆序输出_输入一个整数判断这个整数是几位数,并把这个整数逆序输出! | 学步园...

    import java.util.Scanner; /** * * 问题:输入一个整数判断这个整数是几位数,并把这个整数逆序输出! * * @author Administrator * * 程序如下 ...

  9. 《Visual C++ 开发从入门到精通》——2.4 输入/输出基础

    本节书摘来自异步社区出版社<Visual C++ 开发从入门到精通>一书中的第2章,第2.4节,作者: 王东华 , 李樱,更多章节内容可以访问云栖社区"异步社区"公众号 ...

最新文章

  1. python实现mysql事务_python连接mysql并提交mysql事务示例
  2. python中subplot是什么意思_python matplotlib中的subplot函数使用详解
  3. 链表是否带环、环入口、环长度、链表相交问题分析与总结
  4. androidannotations
  5. python框架django面试问别人什么问你_django面试会问什么
  6. HarmonyOS之sdkmgr命令的使用
  7. C++使用SQLite步骤及示例
  8. java经典程序_java经典程序编程知识(二)
  9. python生成固定长度随机数_python日记——random模块
  10. Spring Cloud Alibaba——Nacos实现服务治理
  11. signature=14a3e4f784cf9004647ea52bac22e550,维族老年慢性阻塞性肺疾病患者合并肺动脉高压的临床研究...
  12. 页面显示拒绝访问请求
  13. C语言中变量的静态分配(Static)和动态分配(StackHeap)
  14. RSA、DSA算法原理与举例
  15. [c++11]我理解的右值引用、移动语义和完美转发
  16. 工科数学分析序言及索引(不断更新中)
  17. hp linux 禁用u盘启动项,惠普台式机UEFI BIOS设置U盘启动
  18. 图片识别之验证码识别
  19. 利用JavaScript在canvas中画一棵树
  20. 百度K站“漏洞”被发现,如何预防被百度人工K站

热门文章

  1. win2012iis php,Win2012 R2 IIS8.5+PHP(FastCGI)+MySQL运行环境搭建教程
  2. python自动获取邮件数据_Python 获取测试报告内容并发送邮件
  3. 一个内核调试函数的实现
  4. Linux文件inode用完一例
  5. python123第七周测验编程题答案_Python第七周编程题
  6. 【SQL】血缘解析 SQL parser 工具介绍
  7. 【Clickhouse】Clickhouse MergeTree家族引擎
  8. 10-30-010-安全简介-Kafka 安全机制
  9. Docker : Docker 查看容器 IP 地址以及相关信息
  10. 95-230-022-源码-WordCount走读-OperatorChain