3 
3.1:汇编语言有什么特点
    解:
    汇编语言是一种以处理器指令系统为基础的低级程序设计语言,它采用助记符表达指令操作码,采用标识符号表示指令操作数,可以直接、有效地控制计算机硬件,因而容易创建代码序列短小、运行快速的可执行程序
3.2编写汇编语言源程序时,一般的组成原则是什么? 
解:
    1完整的汇编语言源程序由段组成
    2)一个汇编语言源程序可以包含若干个代码段、数据段、附加段或堆栈段,段与段之间的顺序可随意排列
    3)需独立运行的程序必须包含一个代码段,并指示程序执行的起始点,一个程序只有一个起始点
    4)所有的可执行性语句必须位于某一个代码段内,说明性语句可根据需要位于任一段内
    5)通常,程序还需要一个堆栈段
3.3 MODEL伪指令是简化段定义源程序格式中必不可少的语句,它设计了哪7种存储模式?各用于创建什么性质的程序?
解:
   
字符串长度不能超过32位
存储模式
TINY
COM类型程序,只有一个小于64KB的逻辑段(MASM 6.x支持)
SMALL
小应用程序,只有一个代码段和一个数据段(含堆栈段),每段不大于64KB
COMPACT
代码少、数据多的程序,只有一个代码段,但有多个数据段
MEDIUM
代码多、数据少的程序,可有多个代码段,只有一个数据段
LARGE
大应用程序,可有多个代码段和多个数据段(静态数据小于64KB
HUGE
更大应用程序,可有多个代码段和多个数据段(对静态数据没有限制)
FLAT
32位应用程序,运行在3280x86CPUWindows 9xNT环境
3.4如何规定一个程序执行的开始位置,主程序执行结束应该如何返回DOS,源程序在何处停止汇编过程?
解:
    开始位置:用标号指明
    返回DOS:利用DOS功能调用的4CH子功能来实现
    汇编停止:执行到一条END伪指令时,停止汇编
3.5逻辑段具有哪些属性?
解:
    段定位、段组合和段类型。
3.6给出采用一个源程序格式书写的例题3.1源程序
例题3.1:创建一个在屏幕上显示一段信息的程序…… 解:
    stack  segment  stack
            db      1024(0)
    stack  ends
    data  segment 
    string  db  'Hello,Assembly'0dH0aH,‘$
    data  ends
  code  segment  'code'
            assume  cs:code,ds:data,ss:stack
    start:  mov  dx,offset string
            mov  ah,9
            int  21h
    code  ends
            end  start
3.7DOS支持哪两种可执行程序结构,编写这两种程序时需要注意什么?
解:
(1). EXE程序
    程序可以有多个代码段和多个数据段,程序长度可以超过64KB
    通常生成EXE结构的可执行程序
(2). COM程序
    只有一个逻辑段,程序长度不超过64KB
    需要满足一定条件才能生成COM结构的可执行程序(MASM 6.x需要采用TINY模式)
3.8举例说明等价“EUQ”伪指令和等号“=”伪指令的用途
解:
    符号定义伪指令有“等价EQU”和“等号=
    符号名 EQU 数值表达式
    符号名 EQU <字符串>       
    符号名 数值表达式
    EQU用于数值等价时不能重复定义符号名,但“=”允许有重复赋值。例如:
        X= 7        ;等效于:X equ 7
        X= X+5    ;“X EQU X+5”是错误的
3.9 给出下列语句中,指令立即数(数值表达式)的值
1mov al,23h AND 45h OR 67h
(2)mov ax,1234h/16+10h
3:mov ax,23h SHL 4
4:mov al, ‘a’and(NOT(‘a’-‘A’))
5:mov ax,(76543 LT 32768) XOR 7654h
解:
    1 al=67h
    2 ax=133h,dx=4h
    3 ax=0230h
    4 al=41h
    4 ax=7654h
3.10画图说明下列语句分配的存储空间及初始化的数据值
1byte_var db ‘abc’,10,10h,EF,3 dup(-1,?,3,dup(4))
(2:)word_var dw 10h,-5,3,dup(?)
解:
    1
41h
42h
43h
10
10h
45h
46h
-1
?
4
4
4
-1
4
4
4
-1
4
4
4
2
10h
00h
0fbh
0ffh
?
?
?
?
?
?
3.11
请设置一个数据段,按照如下要求定义变量:
(1)my1b为字符串常量,表示字符串“personal Computer
(2)my2b为用十进制数表示的字节变量,这个数的大小为20
(3)my3b为用十六进制数表示的字节变量,这个数的大小为20
(4)my4b为用二进制数表示的字节变量,这个数的大小为20
(5)my5w20个未赋值的字变量
(6)my6c100的符号常量
(7)my7c为字符串常量,代替字符串“personal Computer
解:.data
          my1b  db  'Personal  Computer'
            my2b  db  20
            my3b  db  14h
            my4b  db  00010100b
            my5w  dw  20 dup(?)
            my6c  =  100
            my7c  =  <'Personal  Computer'>
3.12 希望控制变量或程序代码在段中的偏移地址,应该使用哪个伪指令?
解:
    利用定位伪指令控制,如org,even,align
3.13名字和符号有什么属性?
解:
    包括逻辑地址和类型两种属性。
3.14设在某个程序中有如下片段,请写出每条传送指令执行后寄存器AX的内容:
;数据段
Org 100h
Varw                  dw 1234h,5678h
Varb                  db 3,4
Vard                  dd 12345678h
Buff                  db 10 dup(?)
Mess                  db ‘hello’
                      ;代码段
                      Mov ax,offset mess
                      Mov ax,type buff+type mess+type vard
                      Mov ax,sizeof varw+sizeof buff+sizeof mess
                      Mov ax,lengthof varw+lengthof vard
       
解:
    ;数据段
        org  100h
    varw    dw    1234h    ,    5678h
    varb    db    3    ,    4
    vard    dd    12345678h
    buff    dd    10    dup(?)
    mess    db    'Hello'
    ;代码段
    mov    ax    ,    offset    varb    +    offset    mess
    mov    ax    ,    type    buff    +    type    mess    +    type    vard
    mov    ax    ,    sizeof    varw+ sizeof    buff+ sizeof mess
    mov    ax    ,    lengthof    varw+ lengthof    vard
3.15假设myword是一个字变量,mybyte1mybyte2是两个字节变量,指出下列语句中的具体错误原因。
1mov byte ptr {bx},1000
(2)mov bx,offset myword{si}
(3)cmp mybyte1,mybyte2
(4)mov mybyte1,al+1
(5)sub al,myword
(6)jnz myword
解:
    (1) 1000超过一个字节所能表达的最大整数
    2SI应为偶数
    3)两个内存单元不能直接运算
    4)应改为[al+1]
    5)条件转移指令后面应接标号,而不是变量
3.16编写一个程序,把从键盘输入的一个小写字母用大写字母显示出来

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。