② 除法程序运行过程
表8 无符号除法程序的运行过程
汇 编 指 令 _FATCH 程序机器地址 码 00 00 指令说明 实验机占用,不可修改。复位后,所有寄存器清0,首先执行 _FATCH_ 指令取指。 微程序 CBFFFF PC ?PC +1 运行时寄存器或存储器的值 写入 EM:24 MOV R0,#7E MOV R1,#0B MOV R2,#00 MOV R3,#05 TEST R1,#FF 00 02 04 06 08 247E 将立即数7EH送入到寄存器R0中。 250B 将立即数0BH送入到R1进村器中。 2600 将立即数00H送入到R2寄存器中。 2705 将立即数00H送入到R3寄存器中。 15FF 寄存器R1与立即数FFH,只改变标志位,并不改变R1中的数值。 3443 如果Z标志位为0,则跳转到43地址。 21 18 将寄存器R1中的数放入累加器A中。 将累加器A中的数据压入堆栈寄存器ST。 C7FBFF CBFFFF C7FBFF CBFFFF C7FBFF CBFFFF C7FBFF CBFFFF C7FFEF FFF7F7 FFFE93 CBFFFF C6FFFF CBFFFF FFF7F7 CBFFFF FFEF9F CBFFFF C7FFEF FFF7F7 FFFE93 CBFFFF C6FFFF CBFFFF FFF7F7 C7FFEF FFFA98 CBFFFF FFF7F7 FFF9DF CBFFFF C6FFFF +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 EM:24 写入 EM:7E R0:7E +1 EM:25 写入 EM:0B R1:0B +1 EM:26 写入 EM:00 R2:00 +1 EM:27 写入 EM:27 R3:05 +1 +1 +1 写入 EM:15 EM:FF W:FF EM:FF A:0B EM:FF JZ 43 MOV A,R1 PUSH A TEST R1,#80 0A 0C 0D 0E 写入 +1 EM:34 +1 写入 EM:43 +1 +1 +1 +1 +1 EM:21 写入 EM:21 +1 EM:18 写入 EM:18 ST:0B +1 +1 +1 写入 EM:15 EM:80 W:80 EM:80 A:0B EM:80 1580 寄存器R1与立即数80H,只改变标志位,并不改变R1中的数值。 3414 如果Z标志位为0,则跳转到14地址。 0B01 对寄存器R3的值进行加1操作。 JZ 14 ADD R3,#01 10 14 写入 +1 EM:34 +1 写入 EM:14 +1 +1 +1 写入 +1 +1 +1 写入 EM:0B EM:0B A:00 EM:0B W:01 EM:01 R3:01 SHL R1 16 29 寄存器R1中的数不带进位向左移一位,并不影响标志位。 +1 EM:29 +1 EM:29 A:0B 写入 EM:29 R1:16 +1 EM:38 GOTO 0E 17 380E 跳转到0E地址。 CBFFFF TEST R1,#80 0E 1580 寄存器R1与立即数80H,只改变标志位,并不改变R1中的数值。 3414 如果Z标志位为0,则跳转到14地址。 0B01 对寄存器R3的值进行加1操作。 C7FFEF FFF7F7 FFFE93 CBFFFF C6FFFF CBFFFF FFF7F7 C7FFEF FFFA98 CBFFFF FFF7F7 FFF9DF CBFFFF C6FFFF CBFFFF C7FFEF FFF7F7 FFFE93 CBFFFF C6FFFF CBFFFF FFF7F7 C7FFEF FFFA98 CBFFFF FFF7F7 FFF9DF CBFFFF C6FFFF CBFFFF C7FFEF FFF7F7 FFFE93 CBFFFF C6FFFF CBFFFF FFF7F7 C7FFEF FFFA98 CBFFFF FFF7F7 FFF9DF +1 +1 +1 写入 EM:0E +1 +1 +1 写入 EM:15 EM:80 W:80 EM:80 A:16 EM:80 JZ 14 ADD R3,#01 10 14 写入 +1 EM:34 +1 写入 EM:14 +1 +1 +1 +1 +1 +1 写入 EM:0B EM:0B A:01 EM:0B W:01 EM:01 R3:02 SHL R1 16 29 寄存器R1中的数不带进位向左移一位,并不影响标志位。 +1 EM:29 +1 EM:29 A:16 写入 EM:29 R1:2C GOTO 0E TEST R1,#80 17 0E 380E 跳转到0E地址。 1580 寄存器R1与立即数80H,只改变标志位,并不改变R1中的数值。 3414 如果Z标志位为0,则跳转到14地址。 0B01 对寄存器R3的值进行加1操作。 写入 +1 EM:38 +1 写入 EM:0E +1 +1 +1 +1 +1 写入 EM:15 EM:80 W:80 EM:80 A:2C EM:80 JZ 14 ADD R3,#01 10 14 写入 +1 EM:34 +1 写入 EM:14 +1 +1 +1 +1 +1 +1 写入 EM:0B EM:0B A:02 EM:0B W:01 EM:01 R3:03 SHL R1 16 29 寄存器R1中的数不带进位向左移一位,并不影响标志位。 +1 EM:29 +1 EM:29 A:2C 写入 EM:29 R1:58 GOTO 0E TEST R1,#80 17 0E 380E 跳转到0E地址。 1580 寄存器R1与立即数80H,只改变标志位,并不改变R1中的数值。 3414 如果Z标志位为0,则跳转到14地址。 0B01 对寄存器R3的值进行加1操作。 写入 +1 EM:38 +1 写入 EM:0E +1 +1 +1 +1 +1 写入 EM:15 EM:80 W:80 EM:80 A:58 EM:80 JZ 14 ADD R3,#01 10 14 写入 +1 EM:34 +1 写入 EM:14 +1 +1 +1 +1 +1 写入 +1 +1 EM:0B EM:0B A:03 EM:0B W:01 EM:01 R3:04 EM:29 EM:29 A:58 SHL R1 16 29 寄存器R1中的数不带进位向左移一位,并不影响标志位。 GOTO 0E TEST R1,#80 17 0E 380E 跳转到0E地址。 1580 寄存器R1与立即数80H,只改变标志位,并不改变R1中的数值。 3414 如果Z标志位为0,则跳转到14地址。 3819 跳转到19地址。 0B01 对寄存器R3的值进行加1操作。 CBFFFF C6FFFF CBFFFF C7FFEF FFF7F7 FFFE93 CBFFFF C6FFFF CBFFFF C6FFFF CBFFFF FFF7F7 C7FFEF FFFA98 CBFFFF FFF7F7 CBFFFF FFFF8F FFF7F7 FFFA99 CBFFFF C6FFFF CBFFFF FFF7F7 FFF9DF CBFFFF FFF7F7 FFF9BF CBFFFF FFF7F7 C7FFEF FFFA99 CBFFFF C6FFFF CBFFFF FFF7F7 CBFFFF FFF7EF FFFA98 CBFFFF C6FFFF CBFFFF +1 写入 EM:29 R1:B0 写入 +1 EM:38 +1 写入 EM:0E +1 +1 +1 +1 +1 写入 EM:15 EM:80 W:80 EM:80 A:B0 EM:80 JZ 14 GOTO 19 ADD R3,#01 10 12 19 写入 +1 EM:34 +1 写入 EM:14 写入 +1 EM:38 +1 写入 EM:19 +1 +1 +1 +1 +1 +1 +1 写入 +1 +1 +1 写入 EM:0B EM:0B A:04 EM:0B W:01 EM:01 R3:05 EM:21 EM:21 A:B0 EM:0C EM:0C W:B0 EM:0C A:7E EM:0C R0:CE MOV A,R1 SUB R0,A 1B 1C 21 0C 将寄存器R1中的数放入累加器A中。 从寄存器R0中减去累加器A中的数,并影响标志位。 JC 21 SHL R2 1D 21 3021 若进位标志位置1,跳转到21H地址。 2A 寄存器R2中的数不带进位向左移一位,并不影响标志位。 寄存器R1中的数不带进位向右移一位,并不影响标志位。 写入 +1 EM:30 +1 写入 EM:21 +1 +1 +1 +1 +1 EM:2A +1 EM:2A A:00 写入 EM:2A R2:00 +1 EM:2D +1 EM:2D A:B0 写入 EM:2D R1:58 +1 +1 +1 写入 EM:13 EM:13 A:05 EM:01 W:01 EM:01 R3:04 SHR R1 22 2D SUB R3,#01 23 1301 从寄存器R3中减去立即数01H,并影响标志位。 JZ 3B MOV A,R1 ADD R0,A 25 27 28 343B 若零标志位置1,跳转到32H地址。 21 04 将寄存器R1中的数放入累加器A中。 将累加器A中的数加入到寄存器R0中,并影响标志位。 写入 +1 EM:34 +1 写入 EM:3B +1 +1 +1 EM:21 写入 EM:21 A:58 +1 EM:04 +1 EM:04 W:CE 写入 EM:04 R0:26 JC 2D 29 302D 若进位标志位置1,跳转到2DH地址。 写入 +1 EM:30 +1 写入 EM:2D SHL R2 2D 2A 寄存器R2中的数不带进位向左移一位,并不影响标志位。 FFF7F7 FFF9DF CBFFFF FFF7F7 C7FFEF FFFA98 CBFFFF FFF7F7 FFF9BF CBFFFF FFF7F7 C7FFEF FFFA99 CBFFFF C6FFFF CBFFFF FFF7F7 CBFFFF FFFF8F FFF7F7 FFFA99 CBFFFF C6FFFF CBFFFF FFF7F7 FFF9DF CBFFFF FFF7F7 FFF9BF CBFFFF FFF7F7 C7FFEF FFFA99 CBFFFF C6FFFF CBFFFF FFF7F7 CBFFFF FFF7EF FFFA98 CBFFFF C6FFFF CBFFFF +1 +1 +1 +1 +1 +1 +1 EM:2A +1 EM:2A A:00 写入 EM:2A R2:00 +1 +1 +1 写入 EM:0A EM:0A A:00 EM:01 W:01 EM:01 R2:01 ADD R2,#01 2E 0A01 将立即数01H加入到寄存器R2中,并影响标志位。 SHR R1 30 2D 寄存器R1中的数不带进位向右移一位,并不影响标志位。 +1 EM:2D +1 EM:2D A:58 写入 EM:2D R1:2C +1 +1 +1 写入 EM:13 EM:13 A:04 EM:01 W:01 EM:01 R3:03 SUB R3,#01 31 1301 从寄存器R3中减去立即数01H,并影响标志位。 JZ 3B MOV A,R1 SUB R0,A 33 35 36 343B 若零标志位置1,跳转到3BH地址。 21 0C 将寄存器R1中的数放入累加器A中。 从寄存器R0中减去累加器A中的数,并影响标志位。 写入 +1 EM:34 +1 写入 EM:3B +1 +1 +1 EM:21 写入 EM:21 A:2C +1 +1 +1 写入 EM:0C EM:0C W:2C EM:0C A:26 EM:0C R0:FA JC 21 SHL R2 37 21 3021 若进位标志位置1,跳转到18H地址。 2A 寄存器R2中的数不带进位向左移一位,并不影响标志位。 寄存器R1中的数不带进位向右移一位,并不影响标志位。 写入 +1 EM:30 +1 写入 EM:18 +1 +1 +1 +1 +1 EM:2A +1 EM:2A A:01 写入 EM:2A R2:02 +1 EM:2D +1 EM:2D A:2C 写入 EM:2D R1:16 +1 +1 +1 写入 EM:13 EM:13 A:03 EM:01 W:01 EM:01 R3:02 SHR R1 22 2D SUB R3,#01 23 1301 从寄存器R3中减去立即数01H,并影响标志位。 JZ 3B MOV A,R1 ADD R0,A 25 27 28 343B 若零标志位置1,跳转到3BH地址。 21 04 将寄存器R1中的数放入累加器A中。 将累加器A中的数加入到寄存器R0中,并影响标志位。 写入 +1 EM:34 +1 写入 EM:3B +1 +1 +1 EM:21 写入 EM:21 A:16 +1 EM:04 +1 EM:04 W:FA 写入 EM:04 R0:10 JC 2D 29 302D 若进位标志位置1,跳转到2DH地址。 写入 +1 EM:30 +1 写入 EM:2D SHL R2 2D 2A 寄存器R2中的数不带进位向左移一位,并不影响标志位。 FFF7F7 FFF9DF CBFFFF FFF7F7 C7FFEF FFFA98 CBFFFF FFF7F7 FFF9BF CBFFFF FFF7F7 C7FFFF FFFA99 CBFFFF C6FFFF CBFFFF FFF7F7 CBFFFF FFFF8F FFF7F7 FFFA99 CBFFFF C6FFFF CBFFFF C6FFFF CBFFFF FFF7F7 FFF9DF CBFFFF FFF7F7 C7FFEF FFFA98 CBFFFF FFF7F7 FFF9BF CBFFFF FFF7F7 C7FFFF FFFA99 CBFFFF C6FFFF CBFFFF C7FFEF +1 +1 +1 +1 +1 +1 +1 EM:2A +1 EM:2A A:02 写入 EM:2A R2:04 +1 +1 +1 写入 EM:0A EM:0A A:04 EM:01 W:01 EM:01 R2:05 ADD R2,#01 2E 0A01 将立即数01H加入到寄存器R2中,并影响标志位。 SHR R1 30 2D 寄存器R1中的数不带进位向右移一位,并不影响标志位。 +1 EM:2D +1 EM:2D A:16 写入 EM:2D R1:0B +1 +1 +1 写入 EM:13 EM:13 A:02 EM:01 W:01 EM:01 R3:01 SUB R3,#01 31 1301 从寄存器R3中减去立即数01H,并影响标志位。 JZ 3B MOV A,R1 SUB R0,A 33 35 36 343B 若零标志位置1,跳转到3BH地址。 21 0C 将寄存器R1中的数放入累加器A中。 从寄存器R0中减去累加器A中的数,并影响标志位。 写入 +1 EM:34 +1 写入 EM:3B +1 +1 +1 EM:21 写入 EM:21 A:0B +1 +1 +1 写入 EM:0C EM:0C W:0B EM:0C A:10 EM:0C R0:05 JC 21 GOTO 2D SHL R2 37 39 2D 3018 若进位标志位置1,跳转到21H地址。 382D 跳转到2DH地址。 2A 寄存器R2中的数不带进位向左移一位,并不影响标志位。 写入 写入 EM:30 +1 +1 EM:21 写入 +1 EM:38 +1 写入 EM:2D +1 +1 +1 +1 +1 +1 +1 EM:2A +1 EM:2A A:05 写入 EM:2A R2:0A +1 +1 +1 写入 EM:0A EM:0A A:0A EM:01 W:01 EM:01 R2:0B ADD R2,#01 2E 0A01 将立即数01H加入到寄存器R2中,并影响标志位。 SHR R1 30 2D 寄存器R1中的数不带进位向右移一位,并不影响标志位。 +1 EM:2D +1 EM:2D A:0B 写入 EM:2D R1:05 +1 +1 +1 写入 EM:13 EM:13 A:01 EM:01 W:01 EM:01 R3:00 SUB R3,#01 31 1301 从寄存器R3中减去立即数01H,并影响标志位。 JZ 3B TEST R0,#80 33 3B 343B 若零标志位置1,跳转到3BH地址。 1480 寄存器R0与立即数80H,只写入 +1 EM:34 +1 写入 EM:3B +1 +1 EM:14