zoukankan      html  css  js  c++  java
  • 21年4月9日分支循环函数(一)

    1.输入流问题

    2.汇编指令

    1.输入流问题

    解决方法,可以多加一个getchar()提前把 读走

    新的问题,如果输入  1空格空格空格 ,那么getchar()只读了一个空格,ch任然得不到Y/N的赋值。

    那么可以用循环   while (getchar()!=' ') {}   读完这一行1之后的东西

    以上方法不大气,直接上  rewind(stdin);

    rewind(stdin)   清除标准输入的按键缓冲区  (vs2019,fflush()不管用,fflush()清除I/O流级别的缓冲区)

    2.关于汇编

    2.1 cup:  exa,ebx,ecx,edx,eip,esp,ebp,esi,edi

        这一类是寄存器,eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。

        如果用C语言来解释,可以把这些寄存器当作变量看待。

    比方说:add eax,-2 ;          //可以认为是给变量eax加上-2这样的一个值。

    这些32位寄存器有多种用途,但每一个都有“专长”,有各自的特别之处。

    EAX 是"累加器"(accumulator),       它是很多加法乘法指令缺省寄存器

    EBX 是"基地址"(base)寄存器,         在内存寻址时存放基地址。

    ECX 是计数器(counter),                  是重复(REP)前缀指令和LOOP指令的内定计数器。

    EDX 则总是被用来放整数除法产生的余数

    ESI/EDI分别叫做"源/目标索引寄存器"(source/destination index),   因为在很多字符串操作指令中,DS:ESI指向源串,而ES:EDI指向目标串.

    EBP是"基址指针"(BASE POINTER),它最经常被用作高级语言函数调用的"框架指针"(frame pointer)。在破解的时候,经常可以看见一个标准的函数起始代码:  

    ESP 专门用作堆栈指针,被形象地称为栈顶指针,堆栈的顶部是地址小的区域,压入堆栈的数据越多,ESP也就越来越小。在32位平台上,ESP每次减少4字节。

    2.2 mov push pop

    进栈指令:push

    出栈指令:pop

    传送指令:MOV (move)

     

     

    2.3 add,inc,sub,mul,div,    

    加法指令:add、adc、inc

    减法指令:sub、sbb、dec、neg、cmp

    乘法指令:mul、imul

    除法指令:div、idiv

    2.4 call,ret,jmp 

    1.call和ret指令都是转移指令,它们都修改IP的值,或同时修改CS和IP的值。它们经常共同用语实现子程序的设计。
     
    2.ret指令用栈中的数据,修改IP的内容,从而实现近转移
     
    3.retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移
     
    CS和IP是8086CPU中两个最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器从名称上我们可以看出它们和指令的关系。还有DS IP也很重要

    CS:IP 是当前执行的指令;

    DS:IP 是用来寻找内存物理地址的.

    4.JMP是汇编语言中的无条件跳转指令。无条件跳转指令可转到内存中任何程序段。转移地址可在指令中给出,也可以在寄存器中给出,或在储存器中指出

    2.5

    mov ebx ,10h           

    mov [ebx],10h     (h表示16进制)

    在汇编中 [ ] 的作用不是单纯的c语言中指针类似,可以分为两种情况,

    对于变量来说 [var] 和 var 作用是一样的

    但是对于寄存器来说就有区别了,[eax] 是eax的地址(这里是c语言中的指针) ,而不加中括号的 eax 就是c语言中的变量值,理解有谬误之处望指正。

     

     

    有关汇编指令部分介绍

    https://blog.csdn.net/qq_40843865/article/details/81210164

    Linux学习笔记
  • 相关阅读:
    leetcode Super Ugly Number
    leetcode Find Median from Data Stream
    leetcode Remove Invalid Parentheses
    leetcode Range Sum Query
    leetcode Range Sum Query
    leetcode Minimum Height Trees
    hdu 3836 Equivalent Sets
    hdu 1269 迷宫城堡
    hud 2586 How far away ?
    poj 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/zealwang/p/14609950.html
Copyright © 2011-2022 走看看