几个汇编代码

2023-11-05

输入输出

DATAS SEGMENT
    arr dw 20 dup(?)
    num db 0
    string1 db 'input the number of interger:(please < 20)',13,10,'$'
    string2 db 'input the interger:',13,10,'$'
    string3 db 13,10,'the intergers you input is that:',13,10,'$'

    
DATAS ENDS

STACKS SEGMENT
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    
    MOV AX,DATAS
    MOV DS,AX
    ;输出提示语
    lea dx,string1
    mov ah,9
    int 21h
    ;输入要输入数字的 个数 
    mov ah,1
    int 21h 
    sub al,'0'
    mov num,al
    mov ah,1;这是为了清除个数之后的回车
    int 21h 
    ;输出提示语
    lea dx,string2
    mov ah,9
    int 21h

    ;输入 cx存放要输入几个数
    mov si,0
    mov ch,0
    mov cl,num
l:
    call scanm;出口参数:bx
    mov arr[si],bx
    add si,2
    loop l
    ;输出提示语
    lea dx,string3
    mov ah,9
    int 21h
    ;输出 cx存放要输出几个数
    mov ch,0
    mov cl,num
    mov si,0
l2:
    mov ax,arr[si]
    call printm;入口参数ax
    ;每次输出之间有个空格
    mov dl,' '
    mov ah,2
    int 21h
    ;
    add si,2
    loop l2

    MOV AH,4CH
    INT 21H

    ;从键盘输入数->bx 
    scanm PROC
    
    push ax
    push cx
    push dx

    ;暂存的数放在bx中 第一步要置0
    mov bx,0
inbegin:    
    mov ah,1;输入一个字符到al中
    int 21h 
    cmp al,' '
    je inend
    cmp al,13
    je inend;如果这个数不是空格 回车 就把他加到暂存数中去

    sub al,'0'
    mov cl,al;新输入的数放在cl中
    ; bx *10 +cl
    mov dl,10
    mov ax,bx
    mul dl; ans ax
    mov bx,ax
    mov ch,0
    add bx,cx
    jmp inbegin
inend:
    pop dx
    pop cx
    pop ax
    ret
scanm ENDP
    ;从 ax中取数打印到屏幕上
    printm proc 
    push ax
    push cx
    push dx
    ;do while 除法
    ;dh 10 
    ;dl cnt
    mov dh,10
    mov dl,0

divbegin:
    div dh
    push ax;ah 余数
    mov ah,0
    inc dl
    cmp al,0
    jne divbegin

    mov dh,dl;dh cnt

print_begin:    
    cmp dh,0
    je printm_end
    pop cx
    dec dh
    mov dl,ch
    add dl,'0'
    mov ah,2
    int 21h
    jmp print_begin
printm_end:
    pop dx
    pop cx
    pop ax
    ret
    printm endp

CODES ENDS
    END START

输出2/16进制

DATAS SEGMENT
 
DATAS ENDS

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

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX



    ;ax 存要输出的数字 cl 存要输出进制 (2 or 16)
    mov ax,0aaaah

    mov cl,16
    call print_x_radix


    mov cl,2
    call print_x_radix



    MOV AH,4CH
    INT 21H

    ;num->ax x_radix->cl
    print_x_radix proc 
        push ax 
        push bx 
        push cx 
        push dx

        ;bx 存的是要与的数
        ;这里假设只输出2进制或者16进制
        cmp cl,2
        jne L0
        mov cl,1 
        mov bx,0001h
        jmp L01
    L0:
        mov cl,4 
        mov bx,000fh
    L01:

        ;先算一下输出几次
        push ax 
        mov ax,16 
        div cl 
        mov ch,al ;ch 要输出几次
        pop ax 
        ;移位
    L1: rol ax,cl 
        push ax 
        and ax,bx 
        ;输出ax 
        ;分情况  如果<=9 就直接输出 否则输出字母
        cmp al,9
        ja L2
        mov dl,al 
        add dl,'0'
        mov ah,2
        int 21h 
        jmp L21
    L2:
        mov dl,al
        add dl,55
        mov ah,2
        int 21h 
    L21:
        pop ax
        dec ch 
        cmp ch,0
        ja L1   

        cmp cl,1
        jne L3
        mov dl,'B'
        jmp L31
    L3:
        mov dl,'H'
    L31:
        mov ah,2
        int 21h


        mov dl,10
        mov ah,2
        int 21h

        pop dx 
        pop cx 
        pop bx 
        pop ax



        ret 
    
    print_x_radix endp

CODES ENDS

 END START

冒泡排序

DATAS SEGMENT
    arr dw 20 dup(?)
    string1 db 'input 10 nums',13,10,'$'
    string2 db 'before sort',13,10,'$'
    string3 db 13,10,'after sort:',13,10,'$'

 
DATAS ENDS

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

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX

    ;输出提示语1
    lea dx,string1
    mov ah,9
    int 21h

    ;循环输入
    ;cx 次数 10个数
    mov si,0
    mov cx,10

    l:
    call scanm
    mov arr[si],bx
    add si,2
    loop l
    

    ;输出提示语2
    lea dx,string2
    mov ah,9
    int 21h

    ;输出没排序的
    mov cx,10
    mov si,0
    l3:
    mov ax,arr[si]
    call printm

    mov dl,' '
    mov ah,2
    int 21h
    add si,2
    loop l3


    ;排序
    ;bx 数组的首地址->bx 元素的个数->cl
    lea bx,arr
    mov cl,10
    call bubble_sort

    ;输出提示语3
    lea dx,string3
    mov ah,9
    int 21h

    ;输出结果
    mov cx,10
    mov si,0
    l2:
    mov ax,arr[si]
    call printm

    mov dl,' '
    mov ah,2
    int 21h
    add si,2
    loop l2



    MOV AH,4CH
    INT 21H

    ;for(int i=0;i<n-1;++i)      循环n-1;   for(int j=0;j<n-i-1;++j)
    ;       if(a[j]>a[j+1])
    ;           swap(a[j],a[j+1];
    ;首地址->bx 数据:word 个数->cl 按照升序
    bubble_sort proc
        push ax
        push bx
        push cx
        push dx
        push si
        push di

        ;dl i dh j cl n
        mov dl,0

        ;cl ->n-1
        ;ch ->n-1-i
        sub cl,1

    i_begin:

        
        cmp dl,cl;n-2
        je i_over

        mov dh,0

    j_begin:
        ;n-2-dl
        mov ch,cl
        sub ch,dl

        cmp dh,ch
        je j_over

        push dx 
        mov dl,dh;j->dl
        mov dh,0;j->dx
        mov si,dx
        add si,si;si=2*j
        add si,bx;si=2*j+bx
        mov di,si;di=si
        add di,2;di=si+2 di
        pop dx

        ;cmp [si] [di]
        mov ax,[si]
        cmp ax,[di]
        jna swap_over
        xchg ax,[di]
        mov [si],ax
    swap_over:
        inc dh
        jmp j_begin
    j_over:
        inc dl
        jmp i_begin

    i_over:    
    
    pop di
    pop si
    pop dx
    pop cx
    pop bx
    pop ax

    ret
    bubble_sort endp




    ;接受输入到 bx中
    scanm PROC
    ; 大bug
    mov bx,0
    ;push 
    push ax
    push cx
    push dx
inbegin:
    mov ah,1
    int 21h 
    
    cmp al,' '
    je inend
    cmp al,13
    je inend
    ; cmp al,'9'
    ; ja inend

    sub al,'0'
    mov cl,al; cl <- al
    ; bx *10 +cl
    mov dl,10
    mov ax,bx
    mul dl; ans ax
    mov bx,ax
    mov ch,0
    add bx,cx
    jmp inbegin
inend:
    pop dx
    pop cx
    pop ax
    ret
scanm ENDP

    printm proc 

    push ax
    push cx
    push dx

    ; in:ax 
    ;do while 除法
    ;dh 10 
    ; dl 计数器 cnt
    mov dh,10
    mov dl,0

divbegin:
    div dh
    push ax;ah 余数
    mov ah,0
    inc dl
    cmp al,0
    jne divbegin

    mov dh,dl;dh cnt

print_begin:    
    cmp dh,0
    je printm_end
    pop cx
    dec dh
    mov dl,ch
    add dl,'0'
    mov ah,2
    int 21h
    jmp print_begin
printm_end:
    pop dx
    pop cx
    pop ax
    ret
    printm endp

CODES ENDS
    END START

判断正数负数零

DATAS SEGMENT
    ;注意溢出
    table db -134,98,-98,158,10,133,-45,66,-134,-122,0,-33,0,-99,0

    string1 db 'positive:',13,10,'$'
    string2 db 13,10,'negetive:',13,10,'$'
    string3 db 13,10,'zero:',13,10,'$'

DATAS ENDS

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

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX


    mov cx,15
    mov si,0
    
    mov al,0;正数
    mov ah,0;负数
    mov bl,0;0


l:
    mov bh,table[si]
    add bh,0
    js nega_p
    jz zero_p
    ;否则是正数
    inc al
    jmp myend
nega_p:
    inc ah
    jmp myend
zero_p:
    inc bl
    jmp myend
myend:
    inc si
    loop l


    
    lea dx,string1
    push ax
    mov ah,9
    int 21H
    pop ax
    push ax
    mov ah,0
    ;输出al
    call printm

    lea dx,string2
    mov ah,9
    int 21H
    pop ax
    
    mov al,ah
    mov ah,0
    ;输出ah
    call printm

    lea dx,string3
    mov ah,9
    int 21H
    mov ah,0
    mov al,bl
    ;输出bl
    call printm

    MOV AH,4CH
    INT 21H


     printm proc 

    push ax
    push cx
    push dx

    ; in:ax 
    ;do while 除法
    ;dh 10 
    ; dl 计数器 cnt
    mov dh,10
    mov dl,0

divbegin:
    div dh
    push ax;ah 余数
    mov ah,0
    inc dl
    cmp al,0
    jne divbegin

    mov dh,dl;dh cnt

print_begin:    
    cmp dh,0
    je printm_end
    pop cx
    dec dh
    mov dl,ch
    add dl,'0'
    mov ah,2
    int 21h
    jmp print_begin
printm_end:
    pop dx
    pop cx
    pop ax
    ret
    printm endp

CODES ENDS
    END START

以有符号数输出

DATAS SEGMENT

    string1 db 'input num',13,10,'$'
 
DATAS ENDS

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

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX

    mov bx,-2559
    call printneg

    MOV AH,4CH
    INT 21H


    printneg PROC ;bx
    add bx,0
    jns printneg_abolute;正数
    mov dl,'-'
    mov ah,2
    int 21h 
    neg bx
printneg_abolute:  
    mov ax,bx
    call printm
    ret
    printneg ENDP 


    printm proc 
    push ax
    push cx
    push dx
    ;do while 除法
    ;dh 10 
    ;dl cnt
    mov dh,10
    mov dl,0

divbegin:
    div dh
    push ax;ah 余数
    mov ah,0
    inc dl
    cmp al,0
    jne divbegin

    mov dh,dl;dh cnt

print_begin:    
    cmp dh,0
    je printm_end
    pop cx
    dec dh
    mov dl,ch
    add dl,'0'
    mov ah,2
    int 21h
    jmp print_begin
printm_end:
    pop dx
    pop cx
    pop ax
    ret
    printm endp

CODES ENDS
 END START
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

几个汇编代码 的相关文章

  • 汇编逆向-Qt

    Qt源码解析 索引 汇编逆向 授权破解示例分析 问题模拟 运行环境 x64dbg Windows 10 Qt5 12 3 示例代码 使用Qt显示当前时间 模拟一般授权软件的时间判断逻辑 当时间超过授权日期后就提示授权过期 没有Qt经验的同学
  • 汇编基础(1)--ARM32

    简介 ARM32 也称为ARM Architecture v7 是一种32位的指令集架构 ISA 由ARM公司开发并广泛应用于嵌入式系统和移动设备 ARM32是ARM体系结构中较早的版本 被许多处理器核使用 包括Cortex A Corte
  • APK反编译破解方法与加密措施

    所谓APK指的是Android操作系统的应用程序安装文件 所谓Crack 简单地理解为 破解 我具体指的是反编译APK文件进行汇编级的代码分析 并修改或插入自己的代码 重新签名打包为APK文件 以达到改变程序原有行为的目的 由以上的说明可知
  • 汇编基础(2) -- ARM64

    简介 ARM架构中 ARM64 也称为AArch64 是一种64位处理器架构 它是ARMv8指令集的一部分 与之前的32位ARM架构相比 ARM64提供了更大的寄存器容量 更广阔的地址空间和更高的计算能力 64位版本的指令集和32位版本的指
  • ARM 64 协程切换上下文的汇编代码解读

    ARM 64协程切换上下文的汇编代码解读 贺志国 2023 8 11 在ARM 64位架构中 有一组通用寄存器 General Purpose Registers 一组浮点寄存器 Floating point Registers 和一组特殊
  • 安天逆向教程——常用汇编语句

    一 汇编基础 二 条件分支 反汇编时更多关注这些条件分支 如果看懂这些条件分支 会对程序的大体逻辑有一个整体的了解 至于程序里面的细节 有时会省略掉 往往关键的跳转理解了甚至进行一点点的改动 就会使得程序发生翻天覆地的变化 三 栈和函数调用
  • 调试的艺术——Debug技巧总结

    调试的艺术 Debug技巧总结 本文从写好的wiki里粘出来的 格式稍乱不影响阅读 用Q 编号代表问题 A 编号代表答案 用这种方式组织 如无特别说明 这些技巧都是针对Visual Studio 2003的 汇编级的问题我作为一个逻辑程序只
  • ARM下高效C编程

    通过一定的风格来编写 C 程序 可以帮助 C 编译器生成执行速度更快的 ARM 代码 下面就是一些与性能相关的关键点 1 对局部变量 函数参数和返回值要使用 signed 和 unsigned int 类型 这样可以避免类型转换 而且可高效
  • ARM指令集

    ARM指令的基本格式 ARM指令的基本格式为
  • 汇编: mul乘法指令(字乘法结果在dx:ax中,8位乘法:一个乘数默认放在al中)

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net m0 37564426 article details 85563170
  • esp和ebp详解

    我的理解 国外一个比较好的汇编网站 http www tenouk com Bufferoverflowc Bufferoverflow1b html http blog sina com cn s blog c3bab4650101ogf
  • Thumb / Thumb-2 / ThumbEE

    本文转载至 http zh wikipedia org wiki ARM E6 9E B6 E6 A7 8B Thumb 较新的ARM处理器有一种16 bit指令模式 叫做Thumb 也许跟每个条件式运行指令均耗用4位的情形有关 在Thum
  • windgb调试

    reference http hi baidu com lewutian blog item 191047882b9c399fa5c27261 html 调试前的必备工作 在开始调试前首先要做的工作是设置好符号 Symbols 路径 没有符
  • push和pushl的区别

    AT T汇编中 命令中可以指定操作范围 如pushb是将一个byte压栈 而pushw就是将一个word压栈 同样pushl就是压栈long 也就是双字 esp指的是esp寄存器 已知是双字 而0xfffffff8 p 指的是一个内存空间
  • 汇编宏伪指令介绍

    1 汇编宏伪指令介绍 macro macname macargs endm 1 macro 和 endm 表示宏定义的开始和结束 2 macro 后面接着宏定义的名字 然后是参数 参数后面的宏定义的实现 3 在宏定义中使用参数 需要添加前缀
  • SIMD优化之ARM纯汇编开发

    ARM纯汇编开发 注 这篇文章是两年前写的 现在更新到CSDN 当时认知不足 其中可能有不少错误 敬请行家指正 为什么要用纯汇编 开发效率高 这里可能让很多人大跌眼镜了 纯汇编开发效率高 首先 这个是有限定条件的 需要反复调优的重度运算场景
  • asm:常见指令大全

    常见指令大全 算数指令 INC 指令 DEC 指令 ADD 指令 SUB指令 MUL指令 IMUL指令 DIV指令 IDIV指令 逻辑指令 AND指令 OR指令 XOR 指令 TEST指令 NOT指令 交换指令 xchg 比较指令 CMP指
  • ads+jlink和keil+jlink调试环境配置

    ads1 2 and jlinkv8 1 安装ads1 2和jlink驱动Setup JLinkARM V408i exe 安装ads1 2时 最后在100 时如果持续时间长 耐心等一下吧 没有等待而点了cancel 则之后就不好重装了 解
  • 《深入理解计算机系统》实验四Architecture Lab

    前言 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻请看 深入理解计算机系统 实验四Architecture Lab下载和官方文档机翻 我觉得这个文档对整个实验很有帮助 如果你的Y86 64环境还没安装好可以看
  • C语言深入学习--checklist4:宏、枚举、switch

    宏 1 宏的本质是什么 函数 语句 类型定义 或者其它 预编译器的文本替换 1 你知道语言设计者为什么设计宏吗 这些原因目前是否成立 在 C程序中 可以用宏代码提高执行效率 宏代码本身不是函数 但使用起来象函数 预处理器用复制宏代码的方式代

随机推荐

  • Google Filament 源码学习(五):Material System (四) - 材质系统 API

    目录 Shader public APIs Introduction Types Math Matrices Frame constants Vertex only Fragment only Handling colors Linear
  • android开发图片分辨率

    一直受到android开发图片分辨率问题困扰 drawable xdpi hdpi mdpi ldpi nodpi 这几个文件夹到底怎么放图片呢 dpi是什么呢 dpi是 dot per inch 的缩写 每英寸像素数 四种密度分类 ldp
  • OpenCV人脸检测及识别(深度学习)

    简介 最近做了一个人脸检测以及识别的程序 很多的文章都有比较详细的叙述 可以自行查找 但是个人觉得大部分文章都太细致了以至于初学者无法快速领会主干 不是否认质量 是侧重点问题 所以结合我遇到了一些问题 现在做个总结 本文主要叙述实现的思路
  • Batch Processing

    在学习HOG SVM实现手写识别算法的过程中 看到对图片库文件夹提取文件名及标签的操作 即生成一个文本文件 按照文件名 标签的格式依次存储 为换行的意思 zaza Ji轻度强迫症 捣饬了半天才写出了个一行的批处理代码 我也是醉了 仅此留个纪
  • 如何实现apex的安装工作?

    1 具体的apex安装步骤 swav luanhaijing gpu02 extract swav feature git clone https github com ptrblck apex git Cloning into apex
  • VSCODE CMAKE C++ 工程调试, C++不以科学计数法输出并控制小数位数

    1 VSCODE调试CMAKE工程配置 1 1 修改CMakeLists txt文件 1 2 程序中 1 3 launch json配置 1 4 开始调试 1 5 注意 2 C 设置输出浮点数且保留位数固定 1 VSCODE调试CMAKE工
  • 通过 rqt_plot 完成ATI F/T 力和力矩传感器六轴数据可视化

    基于该篇博客https blog csdn net qq 34935373 article details 103481401 实现了通过ROS节点的方式启动ATI sensor 完成配置归零和设置软件矢量偏移 并且获取六轴数据 实时的打印
  • Linux:运行存在的可执行文件提示 No such file or directory

    1 前言 限于作者能力水平 本文可能存在谬误 因此而给读者带来的损失 作者不做任何承诺 2 背景 本文分析基于 linux 4 14 132 上游代码 运行环境为 Ubuntu 16 04 4 LTS QEMU Arm vexpress a
  • HTTP参数污染攻击

    服务器两层架构 服务器端有两个部分 第一部分为tomcat为引擎的jsp型服务器 第二部分为apache为引擎的php服务器 真正提供web服务器的是php服务器 工作流程为 client访问服务器能直接访问到tomcat服务器 然后tom
  • SQL注入系列之ASP+ACCESS手动注入(一)----数字型

    一 access数据库 1 简介 Microsoft Office Access是由微软发布的关系数据库管理系统 它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点 是 Microsoft Offi
  • 分类模块丨前端uniapp微信小程序项目

    小兔鲜儿 分类模块 用户点击左菜单的一级分类 切换右侧对应的二级分类和商品 准备工作 参考效果 商品分类页中的广告位 可复用之前定义的轮播图组件 XtxSwiper 静态结构 商品分类页静态结构 src pages category cat
  • 拷贝构造(深拷贝、浅拷贝)

    一 概念介绍 拷贝构造 拷贝构造函数 又称构造函数 是一种特殊的构造函数 它由编译器调用来完成一些基于同一类的其他对象的构造及初始化 其唯一的形参必须是引用 但并不限制为const 一般普遍的会加上const限制 在类中如果没有显式给出拷贝
  • avalon.js 转义html,avalon模块的内建适配器

    text bindings 第一个传参将强制转换为字符串 假值为 然后变成目标节点的innerText 今天的天气为 require ready more avalon function var viewModel myMessage ob
  • OpenLayer和JSTS空间相交应用

    getAreaData DrawGeometry level const that this 多边形绘制结束后获取空间几何数据传递 获取边界 const drawExtent DrawGeometry getExtent 实例化jsts c
  • [230517] TPO71

    7102 Minoan Palaces 目录 7102 Minoan Palaces 正文 题目 Paragraph 1 问题 1 Paragraph 2 问题 2 Paragraph 3 问题 3 4 Paragraph 4 问题 5 6
  • 极速搭建Hexo博客【 CentOS7 + Node.js + Hexo + Github Pages】

    Hexo是一款流行的博客框架 基于Node js 支持Markdown语法 这篇文章记录我如何完成搭建并部署到Github Pages上 创建虚拟环境 养成隔离项目环境的好习惯 python3 m venv venv blog 创建虚拟环境
  • 三相三线与三相四线计算公式

    三相三线与三相四线计算公式 项目 计算公式 备注 视在功率 S UI 有功功率 P 3UxIxcos 3ULILcos Ux 相电压 无功功率 Q 3UxIxsin 3ULILsin UL 线电压 功率因数 cos P S P UI 总视在
  • Linux系统开发

    一 实验目的 设计一款携带多种功能的聊天软件 不仅可以聊天 也能修改字体 计时 绘画等等 二 实验内容 1 ui设计 满分15分 2 画图 timer 多线程 满分20分 3 数据库操作 满分15分 4 TCP网络通信 满分40分 客户端1
  • 红队靶场搭建

    这篇博客主要是讲解一下vulstack红队评估的靶场 从信息收集到控制DMZ区域的WEB服务器 接着联合MSF和CS控制内网机器 随后通过搭建隧道 配置代理 攻击内网机器并且控制域控 主要讲解红队的攻击的全部流程 首先主要讲解一下靶场环境的
  • 几个汇编代码

    文章目录 输入输出 输出2 16进制 冒泡排序 判断正数负数零 以有符号数输出 输入输出 DATAS SEGMENT arr dw 20 dup num db 0 string1 db input the number of interge