精华内容
下载资源
问答
  • 汇编语言(王爽)实验十 编写子程序

    万次阅读 多人点赞 2016-07-28 16:09:21
    标 题:汇编实验10—— 编写子程序 作 者: XHS_12302 时 间: 链 接: 实验10编写子程序 在这次实验中,我们将要编写3个子程序,通过它们来认识几个常见的问题和掌握解决这些问题的方法。同前面的所有实验一样,...

    标 题: 汇编实验10—— 编写子程序
    作 者: XHS_12302
    时 间: 2016_7_28 16:56

     

     

     

     

     

    实验10编写子程序


      在这次实验中,我们将要编写3个子程序,通过它们来认识几个常见的问题和掌握解决这些问题的方法。同前面的所有实验一样,这个实验是必须要独立完成的,在后面的课程中,将要用到这个实验中编写的3个子程序。
    1.  显示字符串
    问题
    显示字符串是现实工作中经常要用到的功能,应该编写一个通用的子程序来实现这个功能。我们应该提供灵活的调用接口,使调用者可以决定显示的位置(行、列)、内容和颜色。

    提示
    (1)  子程序的入口参数是屏幕上的行号和列号,注意在子程序内部要将它们转化为显存中的地址,首先要分析一下屏幕上的行列位置和显存地址的对应关系:
    (2)  注意保存子程序中用到的相关寄存器:
    (3)  这个子程序的内部处理和显存的结构密切相关,但是向外提供了与显存结构无关的接口。通过调用这个子程序,进行字符串的显示时可以不必了解显存的结构,为编程提供了方便。在实验中,注意体会这种设计思想。

    子程序描述
    名称:show_str
    功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
    参数:(dh)=行号(取值范围0~24),(dl)=列号(取值范围0~79),
        (cl)=颜色,ds:si指向字符串的首地址
    返回:无
    就用举例:在屏幕的8行3列,用绿色显示data段中的字符串。

     

     

     

     

    代码:

     

    assume cs:code
       data segment
       db 'Welcome to masm!',0
       data ends
    
     code segment
       start:  mov dh,8
               mov dl,3
               mov cl,2
               mov ax,data
               mov ds,ax
               mov si,0
               call show_str
               mov ax,4c00h
               int 21h
       show_str: push dx
                 push cx
                 push ds
                 push si
    
         mov ax,0b800h
         mov es,ax
         
         mov al,160
         mul dh
         mov bx,ax
         mov al,2
         mul dl
         add bx,ax
        mov al,cl
        
             s: mov cl,[si] 
                  jcxz ok
                  mov dx,[si]
                  mov es:[bx],dx
                  mov es:[bx+1],al
                  inc si
                  add bx,2
                  loop s
    
     ok:             
      pop si
      pop ds
      pop cx
      pop dx
    ret
    code ends
    end start 

     

     

    实验截图

     

     

     

    2.  解决除法溢出的问题
    问题
    前面讲过,div指令可以做除法。当进行8位除法的时候,用al存储结果的商,ah存储结果的余数:进行16位除法的时候,用ax存储结果的商,dx存储结果的余数。可是,现在有一个问题,如果结果的商大于ah或ax所能存储的最大值,那么将如何?
    比如,下面的程序段:
     mov bh,1
     mov ax,1000
     div bh
    进行的是8位除法,结果的商为1000,而1000在ah中放不下,
    又比如,下面的程序段:
    mov ax,1000h
    mov dx,1
    mov bx,1
    div bx
    进行的是16位除法,结果的商为11000H,而11000H在ax中存放不下。
    我们在用div指令做除法的时候,很可能发生上面的情况:结果的商过大,超出了寄存器所能存储的范围。当CPU执行div等除法指令的时候。如果发生这样的情况,将引发CPU的一个内部错误。这个错误被称为:除法溢出。我们可以通过特殊的程序来处理这个错误, 这里我们不讨论这个错误的处理,这是后面的课程中要涉及的内容。

    好了,我们已经清楚了问题的所在:用div指令做除法的时候可能产生除法溢出。由于有这样的问题,在进行除法运算的时候要注意除数和被除数的值,比如1000000/10就不能用div指令来计算。那么怎么办呢?我们用下面的子程序divdw解决。


    子程序描述
    名称:divdw
    功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
    参数:(ax)=dword型数据的低16位
        (dx)=dword型数据的高16位
        (cx)=除数
    返回:(dx)=结果的高16位,(ax)=结果的低16位
        (cx)=余数
    应用举例:计算1000000/10(F4240H/0AH)

      mov ax,4240h
      mov v dx,000fh
      mov cx,0ah
      call divdw


    提示
    给出一个公式:
    X:被除数,范围:[0,FFFF FFFF]
    N:除数,范围:[0,FFFF]
    H:X高16位,范围:[0,FFFF]
    L:X低16位,范围:[0,FFFF]
    int():描述性运算符,取商,比如:rem(38/10)=8
    rem():描述性运算符,取答数,比如:rem(38/10)=8
    公式:X/N=int(H/N)*65536+[rem(H/N)*65536+L]/N
    这个公式将可能产生溢出的除法运算:X/N,转变为多个不会产生溢出的除法运算。
    公式中,等号右边的所有除法运算都可以用div指令来做,肯定不会导致除法溢出。

    代码:

     

    assume cs:code
        code segment
        start:mov ax,4240h
              mov dx,000fh
              mov cx,0Ah
              call divdw
              mov ax,4c00H
              int 21h
    divdw:
          push ax
          mov ax,dx
          mov dx,0
          div cx
          mov bx,ax
          pop ax
          div cx
          mov cx,dx
          mov dx,bx
          ret    
        code ends
    end start

     

     

     

    程序截图:

     

    3.数值显示
    问题
    编程,将data段中的数据以十进制的形式显示出来。
    data segment
    dw 123,12666,1,8,3,38
    data ends
      这些数据在内存中都是二进制信息,标记了数值的大小。要把它们显示到屏幕上,成为我们能够读懂的信息,需要进行信息的转化。比如,数值12666,在机器中存储为二进制信息:0011000101111010B(317AH),计算机可以理解它。而我们要在显示器上读到可以理解的数值12666,我们看到的应该是一串字符:“12666”。由于 显卡遵循的是ASCII编码,为了让我们能在显示器上看到这串字符,它在机器中应以ASCII码的形式存储为:31H、32H、36H、36H、36H(字符“0”~“9”对应的ASCII码为30H~39H)。
      通过上面的分析可以看到,在概念世界中,有一个抽象的数据12666,它表示了一个数值的大小。在现实世界中它可以有多种表示形式,可以在电子机器中以高低电平(二进制)的形式存储,也可以在纸上、黑板上、屏幕上以人类的语言“12666”来书写。现在,我们面临的问题就是,要将同一抽象的数据,从一种表示形式转化为另一种表示形式。
      可见,要将数据用十进制形式显示到屏幕上,要进行两步工作:
    (1)  将用二进制信息存储的数据转变为十进制形式的字符串:
    (2)  显示十进制形式的字符串。
    第二步我们在本次实验的第一个子程序中已经实现,在这里只要调用一下show_str即可。我们来讨论第一步,因为将二进制信息转变为十进制形式的字符串也是经常要用到的功能,我们应该为它编写一个通用的子程序。


    子程序描述
    名称:dtoc
    功能:将word型数据转变为表示十进制数的字符串,字符串以0为结尾符。
    参数:(ax)=word型数据
        ds:si指向字符串的首地址
    返回:无
    应用举例:编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来。
    在显示时我们调用本次实验中的第一个子程序show-str。



    提示
      下面我们对这个问题进行一下简单地分析。
    (1)  要得到字符串“12666”,就是要得到一列表示该字符的ASCII码:31H、32H、36H、36H、36H。
    十进制数码字符对应的ASCII码=十进制数码值+30H
    要得到表示十进制数的字符串,先求十进制数每位的值。
    例:对于12666,先求得每位的值:1、2、6、6、6。再将这些数分别加上30H,便得到了表示12666的ASCII码串:31H、32H、36H、36H、36H。
    (2)  那么,怎样得到每位的值呢?采用如图10.2所示的方法。

    图10.2除10取余法示意


      可见,用10除12666,共除5次,记下每次的余数,就得到了每位的值。
    (3)  综合以上分析,可得出处理过程如下:
    用12666除以10,循环5次,记下每次的余数;将每次的余数分别加30H,便得到了表示十进制数的ASCII码串,如图10.3所示。



    图10.3得到十进制每位数字字符的方法示意

     


    (4)  对(3)的质疑:
    在已知数据是12666的情况下,知道进行5次循环。可在实际问题中,数据的值是多少
    程序员并不知道,也就是说,程序员不能事先确定循环次数。
      那么,如何确定数据各位的值已经全部求出了呢?我们可以看出,只要是除到商为0,各位的值就已经全部求出。可以使用jcxz指令来实现相关的功能。

     

     

     

     

     

    代码:

     

    assume cs:code
      data segment
      db 16 dup(0)
      data ends
    
     
      code segment
        start:mov ax,12666
              mov bx,data
              mov ds,bx
              mov si,0
              call dtoc
              mov dh,8
              mov dl,3
              mov cl,2
              call show_str
              mov ax,4c00h
              int 21h
    dtoc:
           mov cx,ax    ;17
           jcxz bk
           push ax
           mov al,ah
           mov ah,0
           mov bl,10
           div bl
           mov cl,al
           mov ch,ah
           pop ax
           mov ah,ch
           div bl
           mov dl,ah
           mov dh,0
           push dx
           mov ah,cl
           jmp short dtoc   ;29
         bk:pop ax 
            add ax,30h
            mov [si],al
            
            pop ax 
            add ax,30h
            mov [si+1],al
           
            pop ax 
            add ax,30h
            mov [si+2],al
            
            pop ax 
            add ax,30h
            mov [si+3],al    ;44
            
            pop ax 
            add ax,30h
            mov [si+4],al
            mov byte ptr [si+5],0
            ret
           
         
    show_str:
         mov si,0
         mov ax,0b800h
         mov es,ax
         
         mov al,160
         mul dh
         mov bx,ax
         mov al,2
         mul dl
         add bx,ax
         mov al,cl
        
             s: mov cl,[si] 
                  jcxz ok
                  mov dx,[si]
                  mov es:[bx],dx
                  mov es:[bx+1],al
                  inc si
                  add bx,2
                  loop s
    
     ok: ret    
      code ends
    end start


    程序运行截图

     

     

    至此    实验完成    

                               题中有不足之处  希望不吝赐教

                                             文中有的 文字是借鉴别人的    除了代码和截图

                                                 完成实验参考过别的资料,在第二个实验中受过小甲鱼视频(328/2)的启发

                                                                                                   视频资料上云盘找:链接: http://pan.baidu.com/s/1nvpQiLz 密码: et5r

                                                                                                                                                                                                                                     日期:2016_7_28

    展开全文
  • WIN16汇编语言PUSH和POP总结

    万次阅读 2011-01-08 22:45:00
    最近在研究汇编,老是将这两个东东...例如,将通用寄存器ax中的数据入栈,push ax,在16位的汇编中,ax中存放的是两个字节单元,这句话的意思中包含了两个步骤:1)让sp=sp-2,即让sp指针向上移动两个存储单元;2)将ax

          最近在研究汇编,老是将这两个东东搞混淆,觉得有必要总结一下子。

          无论是push还是pop,都是对堆栈段ss的处理,ss中存放堆栈段地址,sp指针中存放偏移地址,栈操作都是以字(2字节)为单位。例如,将通用寄存器ax中的数据入栈,push ax,在16位的汇编中,ax中存放的是两个字节单元,这句话的意思中包含了两个步骤:1)让sp=sp-2,即让sp指针向上移动两个存储单元;2)将ax中两个字节数据传送入sp指向的内存单元。相反,将通用寄存器ax中的数据出栈,pop ax,其中也包含了两个步骤:1)ss:sp指向的字数据传送给ax;2)让sp=sp+2,即让sp指针向下移动两个存储单元。

          再举一个例子,push [bx],这条指令和push ds:[bx]的意思一样的,同上,分两步:1)让sp=sp-2;2)将ds:[bx]处的字数据传送给ss:sp指向的单元。同样,pop [bx],和pop ds:[bx]同样意义,分两步:1)将ss:sp指向的字数据传送给个ds:[bx]所在的字单元。

    展开全文
  • 汇编语言pop和push的自我记录学习 一、 push ax 表示将寄存器ax中的数据送入栈中, pop ax 表示从栈顶取出数据送入ax 1.栈操作都是以一个字为单位进行的(1字 = 2字节) 2.高地址单元存放高8位,低地址单元存放低8位...

    汇编语言pop和push的自我记录学习

    一、
    push ax 表示将寄存器ax中的数据送入栈中,
    pop ax 表示从栈顶取出数据送入ax
    1.栈操作都是以一个字为单位进行的(1字 = 2字节)
    2.高地址单元存放高8位,低地址单元存放低8位。如图在这里插入图片描述
    二、CPU如何知道当前要执行的指令所在的位置?CPU如何知道栈顶的位置?
    1.CS、IP中存放着当前指令的段地址和偏移地址。
    2.8086CPU中,有两个寄存器,段寄存器SS和寄存器SP栈顶的段地址存放在SS中,偏移地址存放在SP中。任意时刻,SS::SP指向栈顶元素。push 和pop指令执行是,CPU从SS和SP中得到栈顶的地址。

    push ax需要执行两步
    (1)SP=SP-2
    (2)将ax中的内容送到SS::SP指向的内存单元处。
    在这里插入图片描述
    pop ax同样也需要执行两步
    (1)将SS::SP指向的内存单元的数据送入ax中。
    (2)SP = SP + 2
    在这里插入图片描述

    push 寄存器 //将一个寄存器中的数据入栈
    pop 寄存器 //用一个寄存器接收数据

    push 段寄存器 ;将一个段寄存器中的数据入栈
    pop 段寄存器 ;出栈,用一个段寄存器接收出战的数据

    push 内存单元;将一个内存字单元处的字入栈(栈操作都是以字为单位)
    pop 内存单元 ;出栈,用一个内存字单元接收出栈的数据

    三、栈顶超界的问题
    1.8086CPU不保证我们对栈的操作不会超界。这也就是说,806CPU只知道栈顶在何处(由SS::SP指示),而不知道我们安排的栈空间有多大。
    2.我们可以看出8086CPU的工作机理。它之劳了当前的情况,当前的栈顶在何处,当前要执行的指令是哪一条。
    3.所以我们需要自己操心栈顶超界的问题。
    例子1:

    mov ax,1000H //将1000H送入到寄存器ax中
    mov ds,ax //将寄存器ax中数据放入到段寄存器ds中
    push [0] //将1000:0处的字压入栈中。
    pop [2] //出栈,出栈的数据送入到1000:2处
    

    例子2:
    (1)将 10000H~~1000FH这段空间当做栈,初始状态栈是空的;
    (2)设置AX = 001AH,BX = 001BH;
    (3)将AX,BX中的数据入栈;
    (4)将AX、BX清零;
    (5)从栈中恢复AX,BX原来的内容。

    mov ax 1000H
    mov ss,ax
    mov sp,0010H
    
    mov ax,001AH
    mov bx,001BH
    
    push ax
    push bx
    
    sub ax,ax
    sub bx,bx
    
    pop bx
    pop ax
    
    
    展开全文
  • 汇编push ds;sub ax,ax;push ax和ret的作用

    万次阅读 2014-07-10 20:47:20
    push ds sub ax,ax push ax  这三条语句是 为后面的ret 做准备,ret即执行 pop ip, pop cs,执行完ip的值为0,cs的值为ds 。程序转移到程序PSP的起始地址,起始地址的前两个字节放的是int 20指令,用于返回DOS...

    源地址:http://mazaoliang.blog.163.com/blog/static/138455093201131471338764/

    程序加载后,DS存放着程序所在内存的段地址,这个内存区域的前256个字节存放在的是PSP。

    PSP:程序段前缀,是DOS操作系统在执行程序时为程序所建立的一个信息块,   里面包括了传递给待运行程序的命令行参数,   程序运行结束时返回DOS所需的地址等有用的信息.  


    汇编程开始时

    push ds

    sub ax,ax

    push ax 这三条语句是为后面的ret做准备,ret即执行pop ip, pop cs,执行完ip的值为0,cs的值为ds。程序转移到程序PSP的起始地址,起始地址的前两个字节放的是int 20指令,用于返回DOS。

    不过不推荐这样做,现在常用

    mov ax 4c00h

    int 21h;终止程序,返回值为al.

     

    **程序示例1:

    code segment

    main proc far

        assume cs:code,ds:data 

    start:

        push ds

        sub ax,ax

        push ax

     

        ret ;; return to DOS

    main endp

    code ends

    end start

     

    如图,查看程序PSP的部份内容

    汇编push ds;sub ax,ax;push ax和ret的作用 - Enjoylifemzl_大二ing - 计算机专业大二ing_linux_c
     

    **程序示例2:

    start:

        push ds

    ;int 21h;  CD N是int n 的机器码

    ;int 10

        sub ax,ax

        push ax

    汇编push ds;sub ax,ax;push ax和ret的作用 - Enjoylifemzl_大二ing - 计算机专业大二ing_linux_c
     


    程序段前缀PSP格式:

    偏移

    字节数

     

    0000

    02

    中断20H

    0002

    02

    以节计算的内存大小(利用这个可看出是否感染引导型病毒)

    0004

    01

    保留

    0005

    05

    至DOS的长调用

    000A

    02

    INT 22H 入口 IP

    000C

    02

    INT 22H 入口 CS

    000E

    02

    INT 23H 入口 IP

    0010

    02

    INT 23H 入口 CS

    0012

    02

    INT 24H 入口 IP

    0014

    02

    INT 24H 入口 CS

    0016

    02

    父进程的PSP段值(可测知是否被跟踪)

    0018

    14

    存放20个SOFT号

    002C

    02

    环境块段地址(从中可获知执行的程序名)

    002E

    04

    存放用户栈地址指针

    0032

    1E

    保留

    0050

    03

    DOS调用 ( INT 21H / RETF )

    0053

    02

    保留

    0055

    07

    扩展的FCB头

    005C

    10

    格式化的FCB1

    006C

    10

    格式化的FCB2

    007C

    04

    保留

    0080

    80

    命令行参数长度(不包含总为最后的0D)及参数
    也是程序运行期间缺省的DTA

    一个操作示例:

    D:\Masm615>dir jch           ;显示计算阶乘的程序

       Volume in drive D has no label
    Volume Serial Number is 18F0-186B
    Directory of D:\Masm615

    JCH    OBJ        371 04-10-03 20:58 JCH.obj
    JCH    ASM      3,637 04-03-03 20:46 jch.asm
    JCH    COM     12,486 04-10-03 20:58 Jch.com
           3 file(s) 16,494 bytes
           0 dir(s) 915,632,128 bytes free

    D:\Masm615>
    jch 7             ;计算7的阶乘
    5040
    D:\Masm615>
    debug jch.com 7   ;DEBUG查看命令行参数情况
    -
    d80 L10                     ;可看出命令行参数长度为02,参数是:2037 0D
    128D:0080
     02 20 37 0D 68 2E 63 6F-6D 20 37 0D 00 00 00 00 . 7.h.com 7.....
    -
    -
    D0 7F                       ;显示PSP数据
    128D:0000
     CD 20 00 9D 00 9A F0 FE-1D F0 4F 03 F2 0B 8A 03
    128D:0010 F2 0B 17 03 F2 0B
     E1 0B-01 01 01 00 02 FF FF FF ;父进程的PSP
    128D:0020 FF FF FF FF FF FF FF FF-FF FF FF FF
     7E 12 4C 01 ;环境块段地址
    128D:0030 F9 0F 14 00 18 00 8D 12-FF FF FF FF 00 00 00 00
    128D:0040 07 0A 00 00 00 00 00 00-00 00 00 00 00 00 00 00
    128D:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 37 20 20
    128D:0060 20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20
    128D:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00

    -
    D127E:0                      ;显示环境块的内容(在DOS提示符下可用SET命令查看环境信息)
    127E:0000 54 4D 50 3D 43 3A 5C 57-49 4E 44 4F 57 53 5C 54 TMP=C:\WINDOWS\T
    127E:0010 45 4D 50 00 54 45 4D 50-3D 43 3A 5C 57 49 4E 44 EMP.TEMP=C:\WIND
    127E:0020 4F 57 53 5C 54 45 4D 50-00 50 52 4F 4D 50 54 3D OWS\TEMP.PROMPT=
    127E:0030 24 70 24 67 00 77 69 6E-62 6F 6F 74 64 69 72 3D $p$g.winbootdir=
    127E:0040 43 3A 5C 57 49 4E 44 4F-57 53 00 50 41 54 48 3D C:\WINDOWS.PATH=
    127E:0050 43 3A 5C 57 49 4E 44 4F-57 53 3B 43 3A 5C 57 49 C:\WINDOWS;C:\WI
    127E:0060 4E 44 4F 57 53 5C 43 4F-4D 4D 41 4E 44 00 43 4F NDOWS\COMMAND.CO
    127E:0070 4D 53 50 45 43 3D 43 3A-5C 57 49 4E 44 4F 57 53 MSPEC=C:\WINDOWS
    127E:0080 5C 43 4F 4D 4D 41 4E 44-2E 43 4F 4D 00 77 69 6E \COMMAND.COM.win
    127E:0090 64 69 72 3D 43 3A 5C 57-49 4E 44 4F 57 53 00 42 dir=C:\WINDOWS.B
    127E:00A0 4C 41 53 54 45 52 3D 41-32 32 30 20 49 35 20 44 LASTER=A220 I5 D
    127E:00B0 31 20 54 34 20 50 33 30-30 00 43 4D 44 4C 49 4E 1 T4 P300.CMDLIN
    127E:00C0 45 3D 64 65 62 75 67 20-6A 63 68 2E 63 6F 6D 20 E=debug jch.com
    127E:00D0 37
     00 00 01 00 4A 43 48-2E 43 4F 4D 00 FF 1E 8E 7....JCH.COM....
                          (环境块中可找到当前执行的程序名)

    -d be1:0                ;显示父进程的PSP(利用父进程PSP可测知程序是否被其他程序加载跟踪)
    0BE1:0000 CD 20 00 A0 00 9A F0 FE-1D F0 14 03 0F 0A 6D 01 . ............m.
    0BE1:0010 0F 0A 78 01 0F 0A
     0F 0A-01 01 01 00 02 FF FF FF ..x.............
    0BE1:0020 FF FF FF FF FF FF FF FF-FF FF FF FF CF 0B 2E 3E ...............>
    0BE1:0030 EF 0B 14 00 18 00 DE 0B-FF FF FF FF 00 00 00 00 ................
    0BE1:0040 07 0A 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
    0BE1:0050 CD 21 CB 00 00 00 00 00-00 00 00 00 00 4A 43 48 .!...........JCH
    0BE1:0060 20 20 20 20 20 43 4F 4D-00 00 00 00 00 37 20 20 .....COM.....7
    0BE1:0070 20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00 ........
    0BE1:0080
     0A 20 6A 63 68 2E 63 6F-6D 20 37 0D 00 00 00 00 . jch.com 7.....
             ;父进程中的命令行参数

    另外:保存INT 22/INT 23/INT 24H的值使得用户在程序中可修改这些中断的值,病毒就曾利用这种技术防止不能传染时引起出错信息。在程序退出时根据PSP中保存的值恢复各中断的值。


    展开全文
  • 汇编语言的所有指令

    万次阅读 多人点赞 2017-11-11 09:43:15
    1、数据传送指令集MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 ...格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法
  • 汇编语言笔记(全)

    万次阅读 多人点赞 2019-08-01 11:40:05
    汇编语言 最近系统的学了下汇编语言,下面是学习笔记,用的书是清华大学出版社出版的汇编语言第三版,作者王爽(最经典的那版)。 汇编语...
  • 1、掌握汇编语言程序的上机步骤 (1 )用编辑程序(如EDIT、记事本等)编辑汇编语言源程序(建立.ASM文件) (2 )用MASM程序产生OBJ文件 (3 )用LINK程序产生EXE文件 (4 )程序的运行(用DEBUG或在DOS下直接运行) 2、掌握...
  • 汇编语言程序

    2016-11-03 20:18:40
    一、汇编语言程序格式及开发过程 汇编语言——用指令的助记符、符号地址、标号等符号书写程序的语言。 源程序—— 用汇编语言编写的程序。 汇编——把源程序翻译成机器语言程序的过程。 汇编程序——完成汇编...
  • 关于底层知识的学习,汇编当然是绕不过,当你需要调优一小段代码时,你需要看的汇编语言。通过学习汇编语言,你能更清楚明白的了解整个计算机的计算过程,指令相关知识,对学习计算机帮助甚大。 目录: 第1章 ...
  • 1. 掌握汇编语言程序的上机步骤 (1 )用编辑程序(如EDIT、记事本等)编辑汇编语言源程序(建立.ASM文件) (2 )用MASM程序产生OBJ文件 (3 )用LINK程序产生EXE文件 (4 )程序的运行(用DEBUG或在DOS下直接运行) 2. 掌握...
  • 回顾 上回我们把汇编里涉及到的寄存器和内存访问相关的内容说了。先来梳理一下: ...寄存器是一些超级小的临时存储器,在CPU里面,存放CPU马上就要...插曲:C语言与汇编语言的关系 还有一些疑虑,先暂时解释一下
  • push指令将a段中的前8个字形数据,逆序存储到b段中 执行过程 push之前 a段数据 (b段数据)栈空间↓ 不要问我为什么不全是0,我并不完全知道,只是找出了一些规律。详见我的前一篇博客“明明定义了栈仍然no ...
  • 汇编语言学习笔记(【汇编语言】小甲鱼零基础汇编) 目录 第〇章 课程资料 第一章 基础知识 第二章 寄存器(CPU工作原理) 第三章 寄存器(内存访问) 第四章 第一个程序 第五章 [BX]和loop指令 第六章 包含多个段...
  • 汇编语言8086笔记

    千次阅读 多人点赞 2017-06-07 14:56:36
    为什么要学习汇编语言? 汇编语言是很多相关课程的重要基础,比如:操作系统、接口技术等。它是底层编程语言,是计算机系统提供给用户最快最有效的语言,也是能对硬件直接编程的语言。因此,对空间和时间要求很高的...
  • 汇编语言程序设计

    千次阅读 2016-11-02 20:48:22
    一、汇编语言程序格式及开发过程 汇编语言——用指令的助记符、符号地址、标号等符号书写程序的语言。 源程序—— 用汇编语言编写的程序。 汇编——把源程序翻译成机器语言程序的过程。 汇编程序——完成汇编任务的...
  • 王爽《汇编语言》笔记(详细)

    万次阅读 多人点赞 2019-03-24 19:53:32
    一、基础知识 1、指令 机器指令:CPU能直接识别并执行的二进制编码...汇编语言发展至今,有以下3类指令组成。 汇编指令:机器码的助记符,有对应的机器码。 伪指令:没有对应的机器码,由编译器执行,计算机并不执...
  • 汇编语言笔记(全)(长文警告)

    万次阅读 多人点赞 2018-09-06 18:12:29
    汇编语言 最近系统的学了下汇编语言,下面是学习笔记,用的书是清华大学出版社出版的汇编语言第三版,作者王爽(最经典的那版)。 汇编语言 基础知识 汇编语言指令组成 CPU与外部器件交互需要 总线 小结 接口...
  • 8086汇编语言精华笔记总结~

    千次阅读 多人点赞 2020-07-09 20:17:30
    目录汇编语言笔记总结第一章 汇编语言的基础知识1、计算机系统概述2、汇编语言介绍3、数据表示4、8086微处理器1、通用寄存器2、标志寄存器FLAGS3、指令指针IP4、段寄存器5、8086寻址方式1、指令的组成2、8086的机器...
  • 汇编语言基本概念汇总

    千次阅读 多人点赞 2015-07-28 00:14:58
    汇编语言应该是我们现在学的最“低级”的语言了,因为现在不会再有人去学机器语言了。而汇编语言还在一些硬件或者嵌入式设备上使用并开发着。以下资料是为了大学的汇编考试整理的资料,现在与大家分享,希望能给大家...
  • 汇编语言》王爽著

    2015-10-11 10:53:11
    汇编语言》王爽著 经典学习汇编教程 汇编语言是各种CPU提供的机器指令的助记符的集合,人们可以用汇编语言直接控制硬件系统进行工作。汇编语言是很多相关课程(如数据结构、操作系统、微机原理等)的重要基础。为了...
  • asm 汇编语言基础知识

    2010-11-26 17:14:09
    第一章 汇编语言程序设计的实验环境及实验步骤 知识提要: 本章主要进行汇编语言实验环境及实验步骤,涉及到的知识点包括: 1、汇编语言源程序编写好以后, 必须经过下列几个步骤才能在机器上运行: (1) 编辑源...
  • 汇编语言学习笔记

    千次阅读 2017-12-29 14:30:08
    (1)汇编指令(汇编语言的核心) (2)伪指令 (3)其他符号 2. CPU与内存 地址总线->地址信息 决定了CPU的寻址能力 一个CPU有N根地址线,可以说地址总线的宽度为N,最多可以寻找2的N次方个地址单元。2的地址...
  • 汇编语言Assembly(二)

    千次阅读 2017-01-02 11:59:04
    汇编语言
  • 汇编语言程序结构(0401)

    千次阅读 2017-03-08 20:46:04
    本文为《汇编语言程序设计》例程。点击链接…进课程主页。第一个汇编程序:assume cs:codesg codesg segment mov ax,0123H mov bx,0456H add ax,bx add ax,ax mov ax,4c00h int 21h codesg ends en
  • 汇编语言》——王爽 第1章 基础知识 汇编语言是直接在硬件之上工作的编程语言。 PC机及CPU物理结构和编程结构的全面研究——《微机原理与接口》 计算机的一般结构、功能、性能的研究——《计算机组成原理》 如何...
  • 如何看懂汇编语言

    千次阅读 2018-11-10 11:41:27
    如何看懂汇编语言 前言 汇编语言,如狼似虎,底层语言,低级语言,很多人一看到汇编就头皮发麻,但是仔细推敲,另有一番风景。这里介绍一下看汇编语言的思路。 信息收集 工欲善其事必先利其器,在实际分析汇编...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,862
精华内容 6,744
关键字:

ds汇编语言push