当前位置:网站首页>2021.11.10汇编考试
2021.11.10汇编考试
2022-07-06 09:17:00 【劲腰傩舞】
随便记录一下,比较零散
目录
储存器寻址方式的区别
2.指令MOV AX, [BX+DI]中源操作数的寻址方式是:( d )(5分)
A. 寄存器间接寻址
B. 寄存器寻址
C. 寄存器相对寻址
D. 基址变址寻址
①对于储存器寻址来说
可用来寻址的寄存器有
基址寄存器:bp和bx
变址寄存器: bi和si
两个变址寄存器不可以同时使用
②寄存器间接寻址意味着只用寄存器的内容来充当偏移地址:[bx]
③寄存器寻址中的“相对”寻址意味着在寄存器的基础上加一个偏移量:[bx+666]
两种符号扩展指令
3.执行指令“MOV AL, 85H”和“CBW”后,AX寄存器的内容是:( c )(5分)
A. 85H
B. 0085H
C. FF85H
D. 85F0H
①有两个符号扩展指令:cbw和cwd
按照我自己的理解方式
cbw:convert Byte to Word
这个指令可以将al这个数扩展到ax
cwd:convert Word to Double
这个指令可以将ax这个数扩展到dx.ax
所以,符号扩展指令的本质其实是类型的转换
②符号位扩展的方式比较简单,直接看该寄存器中的二进制编码方式,最高位如果是1,就扩展1,0就0
db指令定义字符串
4.数据段中定义一个变量VAR DB ‘12345678H’,执行指令“MOV CL,VAR+3”后,CL寄存器内容为:(b)(5分)
A. 12H
B. 34H
C. 56H
D. 78H
①db后面想要定义数字的话,大小不可以大于一个字节。如果定义字符串,那么会按照字符串从左到右的顺序,从低地址往高地址存字符,每个字符占用一个字节,那么,var+3之后,正好指向’4’这个字符,这个时候,查一下ascii表,符号‘4’对应的ascii码是34h
取出一个段的段地址
6.汇编语言中可以作为程序员自定义标识符使用的是:( a )(5分)
A. done
B. idiv
C. xlat
D. @data
@data取出数据段的段地址。比如,mov ax,@data
一种更普适的方法是
通过mov bx,offset var1获得偏移地址
通过mov ds,seg var1获得段地址
SF和OF标志位
7.若AX=1234H,执行指令“ADD AX,7802H”后,AX寄存器的内容和标志位CF,SF,ZF,OF的状态是:(b)(5分)
A. AX=8A36H CF=0 SF=1 ZF=1 OF=0
B. AX=8A36H CF=0 SF=1 ZF=0 OF=1
C. AX=9036H CF=0 SF=1 ZF=1 OF=0
D. AX=9036H CF=0 SF=1 ZF=0 OF=1
①OF: overflow flag。在考虑这个标志位的时候,需要把被加数和加数当成有符号数,也就是说,被加数和加数都是以补码形式存在的,进行相加之后,结果超出了16位补码最大的正数:0fff,即表示溢出,OF设置为1。也就是说,在考虑某个标志位的取值的时候,需要从计算机的角度而非你存放的数据的实际意义去考虑。
②SF:sign flag符号标志.结果的最高位是啥,SF就是啥
③SF和OF在进行有符号运算的时候有意义,但是在进行无符号运算的时候也会有值的变换。
④PF:奇偶标志位,PF会让该标志位和运算结果中的1的个数是奇数,即若运算结果中有奇数个1,则pf为0
带借位的减法指令sbb
12.若AX=1020H, BX=1200H, CF=1,则指令“SBB AX, BX”的执行结果为:(b)(5分)
A. 0FE20H
B. 0FE1FH
C. 0FE21H
D. 01DFH
sbb指令需要考虑上次计算残留的借位,同时,本次计算如果借位了也需要修改CF的值。理论上,结果是ax-bx-cf,但是ax不够减,所以又要进行一次借位,即(F+1)020-1200-1=FE1F。因为这次计算借位了,那么完成之后,设cf=1
寄存器的第x位指的是哪个
14.已知(AL)=56H,若将AL的第0, 2, 6位变反而其它位保持不变,则使用指令( ) AL, BL; 其中(BL)=( a )。(5分)
A. XOR 45H
B. OR 45H
C. XOR 0A2H
D. AND 0BBH
从右往左开始第一位为第0位
立即数寻址和直接寻址的区别
①立即数寻址指的是一个数直接存放在指令中
②而直接寻址是一种储存器寻址,直接通过一个符号或者偏移量定位到内存单元,比如,mov ax,var或者mov ax,[var]
段寄存器和mov指令的配合
①在教材中,段寄存器的缩写是seg
②在汇编语言中,段寄存器有以s结尾的各种寄存器ds cs ss es
③在mov指令中,段寄存器不可以和立即数寻址结合在一起,即不允许:mov seg,imm
dosbox中的标志位怎么看
实验报告里的贴这里吧
一些常见指令对标志位的影响
①对循环指令的记忆,rcl中有一个c,代表这个指令需要考虑CF,即这是一个带进位的左循环指令
②rcl或者rol这些循环指令都影响CF,循环被挤出的数字会存放在CF中
③位运算指令and,or,xor这些指令都会直接将of和cf置0,原因不详,主要是不同指令在设计的时候有其具体的目的,对标志位的影响能力都不同,所以就先记住吧,应付下考试
④mov指令不影响标志位,主要用来传送数据
⑤利用test指令测试一个数是否是负数,或者判断其是否为零。例如,test ax,ax.因为test指令的本质是and指令,区别在于test指令操作数,但是影响zf和sf标志位,test ax,ax的结果是ax本身,如果ax是零,那么会置zf=1,如果ax是负数,那么会置sf=1
各种指令寻址的区别
①从直观上区分和数据寻址的区别,就是,数据寻址涉及的指令是mov,而指令寻址涉及的指令是各种跳转语句jmp loop等等
②指令寻址的目的都是跳转到特定的位置,本质上都是修改cs:ip的数据(cs:ip的内容是下一条指令的地址),根据修改cs:ip的方式,可以将其分为近转移,短转移,远转移
③根据是否修改cs的内容,又分为段内寻址和段间寻址
④近转移就是所谓的相对寻址,也是一种段内寻址,例如jmp labl1(labl1是一个标号,比如labl1:mov ax,1)或者是jmp near ptr lablq,或者是loop指令,近转移的做法就是在当前的ip值上加一个位移量,限制在于位移量的大小在+127~-128字节
⑤短转移可能是直接寻址或者寄存器间接寻址或者储存器间接寻址,也是一种段内寻址,例如jmp short ptr labl1或者jmp ax或者jmp [ax],短转移的做法就是直接将标号labl1的有效地址或者寄存器的内容赋给ip
⑥远转移的做法就是同时修改cs:ip,是一种段间寻址,例如jmp far ptr labl1
⑦各种分类的依据不同,其实记的的时候不用在一个分类中再分类,记住依据就行了,上述那么做也只是为了加深一下理解啦
堆栈传递参数注意事项
①在调用一个子程序之前想要添加一些入口参数,即在调用call指令之前使用push指令,需要注意的是,call指令本身也会向栈中压入东西,即返回的地址
②一般来说,我们在子程序中使用ret指令返回主程序,这个指令为我们做的就是,弹出返回地址,用这个返回地址去设置cs:ip,但此时别忘了,堆栈的栈顶还是之前放入的入口参数,所以一般来说,使用堆栈传递参数的时候,需要用ret i16指令进行返回,这个指令相当于,ret之后,sp+i16,即调低栈顶指针至没有添加入口参数的位置
边栏推荐
- E-commerce data analysis -- salary prediction (linear regression)
- ESP8266连接onenet(旧版MQTT方式)
- ES6语法总结--下篇(进阶篇 ES6~ES11)
- ESP学习问题记录
- Basic operations of databases and tables ----- classification of data
- 小天才电话手表 Z3工作原理
- AMBA、AHB、APB、AXI的理解
- Minio文件下载问题——inputstream:closed
- Pytoch temperature prediction
- PT OSC deadlock analysis
猜你喜欢
JS object and event learning notes
Mysql database interview questions
ESP8266连接onenet(旧版MQTT方式)
Page performance optimization of video scene
CUDA C programming authoritative guide Grossman Chapter 4 global memory
ES6 grammar summary -- Part I (basic)
Fashion Gen: the general fashion dataset and challenge paper interpretation & dataset introduction
Comparison of solutions of Qualcomm & MTK & Kirin mobile platform USB3.0
[golang] leetcode intermediate - fill in the next right node pointer of each node & the k-smallest element in the binary search tree
Types de variables JS et transformations de type communes
随机推荐
arduino JSON数据信息解析
JS变量类型以及常用类型转换
MySQL時間、時區、自動填充0的問題
JS function promotion and declaration promotion of VaR variable
MySQL takes up too much memory solution
Pytorch: tensor operation (I) contiguous
JS變量類型以及常用類型轉換
Working principle of genius telephone watch Z3
Vscode basic configuration
arduino获取随机数
关于Gateway中使用@Controller的问题
Esp8266 connects to onenet cloud platform (mqtt) through Arduino IDE
ES6 grammar summary -- Part 2 (advanced part es6~es11)
Imgcat usage experience
Oppo vooc fast charging circuit and protocol
MySQL replacement field part content
Rough analysis of map file
Important methods of array and string
Common DOS commands
I2C bus timing explanation