ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

汇编——16位汇编&调试&一些练习代码

2022-02-07 11:02:20  阅读:154  来源: 互联网

标签:汇编 16 int db mov 寄存器 ax data 调试


  • 编译:ml 1.asm
  • 调试:debug 1.exe
  • 调试命令:
    r 查看当前位置代码;p 单步步过;t 单步步入;u 查看附近代码
    d 0b3b 查看0b3b位置内存;g 运行程序
  • 16位汇编代码基本结构
assume cs:code,ds:data

data segment
buffer db 'xxxx$'
data ends

code segment
rkmain proc
	mov ax,data
	mov ds,ax
	mov dx,offset buffer
	mov ah,09H
	int 21H
	mov ah,07H
	int 21H
	mov ax,4c00H
	int 21H
rkmain endp
start:call rkmain 	
code ends
end start
  • 16位汇编声明字符串
    buffer db 0DH,0AH, xxxxx$'
    这里db是define byte的缩写,意为buffer变量定义为一字节长度
    0ah和0dh组合起来是换行的意思,$经常时字符串的结束标记

  • 段寄存器的赋值必须通过通用寄存器。
    若使用mov ax,data是立即数寻址方式,而立即数是不允许直接送段寄存器的。所以需要通过先送立即数到寄存器,再从寄存器到段寄存器,即mov ax,data mov ds,ax

  • offset
    回送变量或标号的偏移地址值,功能和lea指令类似,效率更高一些

  • DOS的0AH号功能调用
    比如在数据段有如下定义:
    buff db 5,0,5 dup(0)
    这里的5表示字符串最大长度为5个字符;0占用的那个字节在调用结束后会被放入实际输入的字符个数;5 dup(0)开辟5个字节单元,存放输入的字符的ASCII码。
    在代码段用下面的指令进行调用:
    lea dx,buff
    mov ah,0ah
    int 21h
    运行时输入“ABC”
    则调用结束后,内存的buff单元的内容应该是:05H,03H,41H,42H,43H,00H,00H

标签:汇编,16,int,db,mov,寄存器,ax,data,调试
来源: https://blog.csdn.net/markey1/article/details/122751932

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有