在汇编语言中NUM,COSEG,OFFSET,EXCHG,INC,INT是什么意思啊?
1、OFFSET是将数值回送变量或标号的偏移地址值.
2.LEA是将数值回送变量或标号的有效地址值.
3.SEG, 汇编程序将回送变量或标号的段地址值.
4、LEA BX,LIST5、MOV BX,OFFSET LIST6、可以看出,LEA和OFFSET这两条指令在功能上是相同的,BX寄存器都可得到符号地址LIST的值,而且此时MOV指令的执行速度会比LEA指令更快。但是,OFFSET只能与简单的符号地址相连,而不能和诸如LIST[SI]或[SI]等复杂操作数相连。因此,LEA指令在取得访问变量的工具方面是很有用的。
DA1 DB 2,-3,-4,-5,34,-4,0,3,4,24 第一个变量da1 为字节类型db
COUNT EQU $-DA1 count是一个常量因为用了equ 其值为$-da1,后面会解释
NUM DB ?
num是变量名 类型是db也就是字节 其内容未知所以用了问号
DATA ENDS 代表数据段结束
以上是数据段定义
代码段开始
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA 将各个段的首址放入对应的段寄存器
ST: MOV AX,DATA st代表一个标号,也就是这一段程序的开始意思为start 这个标号可以随意在汇编语言中如果出现冒号,则冒号前的字符串就是程序的标号
mov ax,data 意思是将数据段的首地址放入ax中
MOV DS,AX mov ds,ax 就是将ax的内容放入数据段寄存器ds中由于段寄存只能进行16位的读写,因此需要用ax来倒一下
MOV SI,OFFSET DA1 将变量da1的偏移地址放入寄存器si中
MOV CX,COUNT-1 count=$-da1 其中$为 以da1为首址的数据段结束之后的下一个地址而da1是这个数据段的首地址
也就是2的地址,count-1就计算了da1这段数据的字节数,由于每个数据都是字节类型,它实际代表的是以从2开始的数据个数
XOR BL,BL xor代表异或运算,bl内的值和bl自身做异或一定是等于一的
EXCHG: MOV AL,[SI] exchg是一个标号,这一句是将si中的内容所指向的单元的数据放入al,也就是将2放入al中
XOR AL,[SI+1] si中的内容所指向的单元的下一个单元中的数据与al做异或 实际就是相邻两个数作异或了在第一次循环时是2与-3异或00000010和11111101结果是0xff,放入al
TEST AL,80H test的功能是将两个数相与,但不进行赋值操作,这里是将al中的数与0x80相与,结果不为零
JE NEXT je代表为零跳转,上一步操作不为零,因此不跳到next而去执行inc bl
INC BL inc代表自增,将bl的内容自增,bl内容从0增到1
NEXT: INC SI si的内容自增,在下一次循环中[si]的内容将会是-3而不是2,因为si的内容增了1,相当于指针的自增操作,指向下一个单元
LOOP EXCHG loop的意思是如果cx中的内容不为零则跳转到标号处,标号是exchg则跳入exchg
MOV NUM,BL 当cx变为零的时候,也就是当遍历了da1为首址的数据段后 终止循环,将bl的值送入num中,num 是前面数据段定义的一个变量
例行公事,终止这段汇编指令,通过21h号中断实现
MOV AX,4C00H
INT 21H
COSEG ENDS 代码段结束
END ST st标号结束
DATA SEGMENT 数据段开始
DA1 DB 2,-3,-4,-5,34,-4,0,3,4,24 第一个变量da1 为字节类型db
COUNT EQU $-DA1 count是一个常量因为用了equ 其值为$-da1,后面会解释
NUM DB ?
num是变量名 类型是db也就是字节 其内容未知所以用了问号
DATA ENDS 代表数据段结束
以上是数据段定义
代码段开始
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA 将各个段的首址放入对应的段寄存器
ST: MOV AX,DATA st代表一个标号,也就是这一段程序的开始意思为start 这个标号可以随意在汇编语言中如果出现冒号,则冒号前的字符串就是程序的标号
mov ax,data 意思是将数据段的首地址放入ax中
MOV DS,AX mov ds,ax 就是将ax的内容放入数据段寄存器ds中由于段寄存只能进行16位的读写,因此需要用ax来倒一下
MOV SI,OFFSET DA1 将变量da1的偏移地址放入寄存器si中
MOV CX,COUNT-1 count=$-da1 其中$为 以da1为首址的数据段结束之后的下一个地址而da1是这个数据段的首地址
也就是2的地址,count-1就计算了da1这段数据的字节数,由于每个数据都是字节类型,它实际代表的是以从2开始的数据个数
XOR BL,BL xor代表异或运算,bl内的值和bl自身做异或一定是等于一的
EXCHG: MOV AL,[SI] exchg是一个标号,这一句是将si中的内容所指向的单元的数据放入al,也就是将2放入al中
XOR AL,[SI+1] si中的内容所指向的单元的下一个单元中的数据与al做异或 实际就是相邻两个数作异或了在第一次循环时是2与-3异或00000010和11111101结果是0xff,放入al
TEST AL,80H test的功能是将两个数相与,但不进行赋值操作,这里是将al中的数与0x80相与,结果不为零
JE NEXT je代表为零跳转,上一步操作不为零,因此不跳到next而去执行inc bl
INC BL inc代表自增,将bl的内容自增,bl内容从0增到1
NEXT: INC SI si的内容自增,在下一次循环中[si]的内容将会是-3而不是2,因为si的内容增了1,相当于指针的自增操作,指向下一个单元
LOOP EXCHG loop的意思是如果cx中的内容不为零则跳转到标号处,标号是exchg则跳入exchg
MOV NUM,BL 当cx变为零的时候,也就是当遍历了da1为首址的数据段后 终止循环,将bl的值送入num中,num 是前面数据段定义的一个变量
例行公事,终止这段汇编指令,通过21h号中断实现
MOV AX,4C00H
INT 21H
COSEG ENDS 代码段结束
END ST st标号结束
不好意思,复制了前面仁兄的话,不过是我自己说,我也会这样说的.其实你可以自己去买本书查查就知道了!
在汇编语言中NUM,COSEG,OFFSET,EXCHG,INC,INT是什么意思啊?
代码段开始 COSEG SEGMENT ASSUME CS:COSEG,DS:DATA 将各个段的首址放入对应的段寄存器 ST: MOV AX,DATA st代表一个标号,也就是这一段程序的开始意思为start 这个标号可以随意在汇编语言中如果出现冒号,则冒号前的字符串就是程序的标号 mov ax,data 意思是将数据段的首地址放入ax中 MOV DS,...
c语言中while(num)或if(num)就执行语句,num表示什么?
while 和 if 括号中的都是判断条件 分为真和假,如果是真 就执行他们的程序,一般在c语言中 假用0表示 其他数表示真 所以 如果num不为0 就表示真 执行该语句的内容,为0表示 假 跳过该语句内容 热心网友| 发布于2013-01-01 举报| 评论 3 0 num为真。。。就是为1 的意思 lvylh | 发布于2013-01...
汇编语言中NUM DB 30H,'!=','$'表示什么
这里定义了一个名字为NUM的变量。这个变量指向的内存地址中,按字节,依次存放了4个字符。第一个字节地址的内容是30H, 也就是数字'0'这个字符。第二个字节和第三个字节,分别是字符'!'感叹号 和字符'='等于号。第四个字节,存放的是字符‘$’美元符号。在DOS系统功能调用的09H号子功能输出显示字符...
汇编语言求两个有符号数之差的绝对值
对于汇编语言来说,求两个有符号数之差的绝对值需要用到条件分支跳转指令和数据传送指令。下面是一段求两个有符号数之差的绝对值的汇编代码:```MOV AX, [num1] ;将num1的值存入AX寄存器 SUB AX, [num2] ;将num2的值从AX寄存器中减去 JNS positive ;如果结果为正数(即不小于0),则跳转到...
汇编语言,怎么将一个数值乘以1.5 或 2 或2.5 或 3
(1)乘1.5 Mov ax, num Mov bx, ax Shr bx, 1 Add ax,bx (2)乘2 Mov ax, num Shl ax, 1 (3)乘2.5 Mov ax, num Mov bx, ax Shl ax, 1 Shr bx, 1 Add ax, bx (3)乘3 Mov ax, num Mov bx, ax Shl bx, 1 Add ax, bx ...
汇编语言问题,急急!设数据段中变量NUM1,NUM2,NUM3中各存放了1个数,
stack,ds:data start:mov ax,data mov ds,ax mov ax,stack mov ss,ax mov [RESULT],0 test [NUM1], 0ffffh jz procexit test [NUM2], 0ffffh jz procexit test [NUM3], 0ffffh jz procexit mov [RESULT],1 procexit:; 程序退出 mov ax,4c00h int 21h code ends end start ...
单片机 汇编语言2句:NUM EQU 30H ; FLAG BIT 00H ; 什么意思啊?equ对应...
你问题中的EQU,BIT相当于C语言中的#define NUM 30H 这样你在写程序的时候只需要使用这个变量名字就可以了,而不需要再去记这个变量在什么地址上了。NUM EQU 30H表示将内部RAM的30H地址作为变量NUM使用 由于51内部RAM的20H字节~2FH字节的每个位可以分别寻址,位地址范围为00H~7FH,所以 FLAG BIT 00H...
汇编语言怎么从键盘输入一个十进制的两位数,并把它存到数组里面?_百度...
; 键盘输入数值数组子程序(数组名为@array,元素个数存放在@num中); 可以是负数 INPUTNUM PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSHF ; 对数组@array清零 MOV CX,100 MOV AX,0 LEA DI,@ARRAY REP STOSW MOV WORD PTR ...
汇编语言求NUM+2和NUM字单元中存放的32位有符号数的相反数.结果存回原...
start:push cs pop ds mov ax,a mov bx,b add ax,bx mov a,ax call dispax mov ah,4ch int 21h a dw 32767 b dw 32769 dispax proc near ; 以10进制数形式显示无符号字的值,要显示的值事先存 AX 中 push bx push cx ;保存bx、cx、dx、si push dx push si mov b...
汇编语言实现将两个8位无符号数乘法的程序编为一个子程序,被乘数、乘数...
;子程序名:MULTI ;功能: 把两个8位无符号数相乘 ;入口参数:NUM开始的两个储存单元 ;出口参数:NUM开始的3,4个存储单元 ;其他说明:MULTI PROC PUSH AX MOV AL,BYTE PTR NUM MOV AH,BYTE PTR (NUM+1)MUL AH MOV WORD PTR (NUM+2),AX POP AX MULTI ENDP ...
颛烁银杏: 汇编指令中没有这个指令 应该是开始的定义里的变量吧 比如 data segment num db 86 dup(?) num1 equ num data ends ;意思就是给num这个变量留 86个字节内存单元 然后num一也同样定义~~
尖扎县17656051407: 汇编语言中NUM DB 30H,'!=','$'表示什么 - ?
颛烁银杏: 这里定义了一个名字为NUM的变量. 这个变量指向的内存地址中,按字节,依次存放了4个字符. 第一个字节地址的内容是30H, 也就是数字'0'这个字符. 第二个字节和第三个字节,分别是字符'!'感叹号 和字符'='等于号. 第四个字节,存放的是字符'$'美元符号.在DOS系统功能调用的09H号子功能输出显示字符串功能中,对要显示的字符串的格式要求是必须用'$'字符作为显示结束的标志.从这个变量的定义方式看,它是要用来输出显示的一个字符串. 也就是说,你若用09H号功能显示NUM字串,它将显示 '0!=' 三个,然后结束此次调用.
尖扎县17656051407: 汇编语言中各种运算符的英文全称? - ?
颛烁银杏: 1.条件码标志位 OF(overflow flag)溢出标志 SF(sign flag)符号标志 ZF(zero flag)零标志 CF(carry flag)进位标志 AF(auxiliary carry flag)辅助进位标志 PF(parity flag)奇偶标志2.控制标志位 DF(direction flag)方向标志3.系统标志位 TF(trap flag) 陷阱...
尖扎县17656051407: 汇编语言每个指令的字节数是多少? - ?
颛烁银杏: 不同的cpu的汇编指令系统不同,1. 对于8位机,每条指令的字节数大多数为 1-3 字节,有的也有4字节的(比如Z80的汇编中的 变址寻址指令); 2. 对于16位机,每条指令通常为2-6字节.1.定义: 汇编语言(assembly language)是一种用...
尖扎县17656051407: 汇编运算符优先级 - ?
颛烁银杏: 原发布者:zcs110zcs 运算符 含义 运算符类型 结合方向15 () 圆括号 单目 自左向右 [] 下标运算符 —> 指向结构体成员运算符 、 结构体成员运算符 14 !逻辑非运算符 自右向左 ~ 按位取反运算符++ 自增运算符-- 自减运算符- 负号运算符 (类型) 类型转换运算符* 指针运算符
尖扎县17656051407: 汇编语言中判断奇偶数怎么判断?急! - ?
颛烁银杏: AL里面放要判断的数,测试最末一位是否是1.如果是0,则说明是偶数,跳转的处理偶数的程序段;如果是1,则说明是奇数. 在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址.在不同的设备中,汇...
尖扎县17656051407: 汇编语言的基本数据类型?
颛烁银杏: 汇编语言所用到基本数据类型为:字节、字、双字等这些数据类型在以后章节中都有相应类型介绍说明符下面对它们进行最基本描述 1、字节 个字节有8位 2进制组成其最高位是第7位最低位是第0位如右图所示在表示有符号数时最高位就是符号...
尖扎县17656051407: 汇编语言buff什么意思 - ?
颛烁银杏: 不带引号的?,指从BUFF的位置开始预留指定字节数的内存空间; 带引号的?,指从BUFF的位置开始连续存放指定字节数的?字符; 带引号的$,指从BUFF的位置开始连续存放指定字节数的$字符. 请参考
尖扎县17656051407: 关于汇编语言地址的问题 - ?
颛烁银杏: 首先是,最大物理地址肯定是20位,即FFFFF.如果要计算 段地址*10H+偏移地址,那么,它必定要小于等于FFFFF.F000*10H+FFFF=FFFFF,注意..这里是乘以10H或16D,这样就正好是最大物理地址,20位.而如果段地址是FFFF,那么乘以...
尖扎县17656051407: 汇编程序中,节类型和字节类型的区别... - ?
颛烁银杏: 字就是word,字节是byte,1word=2byte. 一个字节类型占用一个字节,这句话好废话啊.字节就是字节,还什么占用不占用的呀. 内存里以字节为基本单位,并由多个字节组成字、双字等等类型. 至于你说的数字在内存里存放的问题,这个在汇编里就由你自己决定咯,你可以将数字1放在一个字节里(变量名 db 1),也可以将1放在一个字里(变量名 dw 1),还可以放在双字里(变量名 dd 1). 总的来说,在汇编里,没有高级语言里的类概念,所有的都是内存地址和内存地址里放的二进制. 转换一下你的思考方式,你会豁然开朗的.