zoukankan      html  css  js  c++  java
  • 【汇编程序】BUF为首址的100个字节单元用原码表示的有符号数依次编程用补码表示的有符号数

    对有符号数据进行取补码的的时候,我们可以先将最高位清零 使用and ax,7f

    然后 在使用neg 指令对ax 中的数据进行取反加1 就可以获取到。

    ;将内存中以BUF为首址的100个字节单元用原码表示的有符号数依次编程用补码表示的有符号数
    ;依次放在原100个字节单元中   
    data segment 
        buf db 200 dup(?)    ;定义200个一字节的空间  用?来进行占位
        count equ 100        ;equ等值伪指令equ 常数值100赋给符号名count
    data ends
    stack segment para stack 'stack'  ;para 定位类型 stack 组合栈 '分类名' statck
        sta db 100 dup(?)    ;定义100个字节的空间 用?来进行占位
    stack ends
    code segment 
        assume cs:code,ds:data,ss:stack
     begin:mov ax,data       ;将数据段的段基址赋值给ax
        mov ds,ax            ;ax 数据段赋值给ds
        mov cx,count;         //串长送
        lea bx,buf            ;buf首地址送bx
      l2:test byte ptr[bx],80h ;[bx]最高位是否是0  对两个操作数进行 逻辑与操作 并修改标志位 但不会送结果
        jz l1;为0转l1   相当于最高位是一个0 不是一个有符号数 是一个正数 所以不需要修改 正数的补码就是其补码
        and byte ptr[bx],7fh;[bx]最高位清0   最高位清零
        neg byte ptr[bx];求负数     neg指令 对存储器中的数据 取反加1 获取的就是负数的补码形式
      l1:inc bx;指向下一个单元
         loop l2;cx-1>cx 不为0转l2
         mov ah,4ch     ;程序终止
         int 21h       ;返回dos程序
       code ends
    end begin
  • 相关阅读:
    Java基础之StringBuffer和StringBuilder的区别
    ElasticSearch初体验之使用
    oracle基础之游标的理解与使用
    Java基础之创建实例化对象的方式
    vue.$nextTick实现原理
    vue3双向数据绑定原理_demo
    css实现水平-垂直居中的方法
    中文数组转为数字
    props&attrs provide inject
    vue2和vue3比较
  • 原文地址:https://www.cnblogs.com/qxlxi/p/12860891.html
Copyright © 2011-2022 走看看