问两个汇编小问题……很菜的CONAME DB ‘SPACE EXPLORERS INC.’PRLINE DB 20 DUP (‘’) 从左到右把CONAME中的字符串传送到PRLINEMOV CX, 20CLDMOV SI, SEG CONAME // 这里的 SEG CONAME是什么意思呢?这句的作用是什么?MOV DS, SIMOV ES, SI //为什么它还是用si呢?这时的si是不是指向prline?LEA SI, CONAMELEA DI, PRLINEREP M
2019-04-22
问两个汇编小问题……很菜的
CONAME DB ‘SPACE EXPLORERS INC.’
PRLINE DB 20 DUP (‘’)
从左到右把CONAME中的字符串传送到PRLINE
MOV CX, 20
CLD
MOV SI, SEG CONAME // 这里的 SEG CONAME是什么意思呢?这句的作用
是什么?
MOV DS, SI
MOV ES, SI //为什么它还是用si呢?这时的si是不是指向prline?
LEA SI, CONAME
LEA DI, PRLINE
REP MOVSB
2)课本的 题目:“add dx,0f0f0H 如执行指令前 (dx)=4562H
4562 0100 0110 0101 0010
+F0F0 ->1111 0000 1111 0000
0011 0111 0100 0010
指令后dx=3742H zf=0 sf=0, cf=1 of=0 结果正确。”请问怎么判断结果正确呢?题目又没有给说正负什么的…
优质解答
1.
MOV SI, SEG CONAME 是把 CONAME 所在段地址传送给 SI
MOV ES, SI ;让 CONAME 所在段地址赋给 ES
执行 REP MOVSB 指令前,要给 DS:SI 及 ES:DI 赋值,当然还有 CX
作用是将 DS:SI 所指地址,长度为 CX 的字节传送到 ES:DI 处
2.
很简单,因为最高位已进位,左边第二位相加(1+1)进位到第一位后,左边第一位 1+1 也就进位了
而这个进位超出了 16 位(bit),所以CF=1
SF 与运算结果的最高位相同 = 0
运算结果不为为0, ZF = 0
因两数符号相反,所以相加后不会溢出,OF = 0
1.
MOV SI, SEG CONAME 是把 CONAME 所在段地址传送给 SI
MOV ES, SI ;让 CONAME 所在段地址赋给 ES
执行 REP MOVSB 指令前,要给 DS:SI 及 ES:DI 赋值,当然还有 CX
作用是将 DS:SI 所指地址,长度为 CX 的字节传送到 ES:DI 处
2.
很简单,因为最高位已进位,左边第二位相加(1+1)进位到第一位后,左边第一位 1+1 也就进位了
而这个进位超出了 16 位(bit),所以CF=1
SF 与运算结果的最高位相同 = 0
运算结果不为为0, ZF = 0
因两数符号相反,所以相加后不会溢出,OF = 0